繁体   English   中英

如何在QLineEdit小部件中使文本设置为QTableView中的标题?

[英]How to make text in QLineEdit widget make it set as header in a QTableView?

我想在几个QLineEdit小部件中使用用户键入的文本在QTableView中设置水平标题的文本。 我是模型视图编程和Qt框架的新手,所以我不确定这是否是正确的方法,但是到目前为止,我的工作是在MainWindow类中将带有QLineEdits的小部件设置为中央窗口小部件,然后在所有QLineEdits上调用.text()。 结果传递到一个列表,字符串列表作为参数传递到我的模型类(QAbstractTableModel)。 在模型中,我调用headerData()函数在右列标题中显示字符串。 但是,由于QLineEdits最初是空的,所以没有显示任何内容。 现在,当我尝试更改QLineEdit中的文本时,它不会更新标题,从而使标题保持为空。 我应该使用哪些信号和插槽将QLineEdit与我的模型连接? 感谢任何帮助。

由于没有源代码,我只是根据我以前的经验给您我的意见。 有两种方法可以实现信号和时隙。 一种是您可以为所有lineEdits提供多个“ returnPressed”信号,并将其连接到一个插槽,我们可以将其命名为“ retrieve_all_line_edits”,以从LineEdits获取所有文本。 每当您按下返回键时,无论您位于哪个lineEdit中,它始终会遍历所有lineEdits。 此处的Pseducode:

lineEdit1.returnPressed.connect(retrieve_all_line_edits)
lineEdit2.returnPressed.connect(retrieve_all_line_edits)
....

def retrieve_all_line_edits(self):
    text1 = lineEdit.text()
    text2 = lineEdit.text()
    ...
    tableHeader = [text1, text2...]
    table_header_update(tableHeader)

另一个是您可以使用带有“ clicked”信号的按钮,并执行与第一个相同的检索操作。

updateButton.clicked.connect(retrieve_all_line_edits)

resolve_all_line_edits与上述相同。

很抱歉使用python来解释这一点。

正如我说过我以前没有使用过QTableView一样,我无法准确回答您的问题。 但是我已经用谷歌搜索了,它可能是model.appendRow()或model.insertRow()或itemDelegate。 如果仍然无法正常工作,建议您改用QTableWidget。

要更新QTableView小部件,无论您使用Qt Creator还是Qt Designer或手动编写UI,您都必须分别拥有一个UI类和一个更新UI操作类。 对于您的UI类,可能看起来像这样:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.tableView = QTableView()

在更新的UI类中,您可能具有:

class UpdateUI(object):
     def __init__(self, parent = None):
         super(UpdateUI, self).__init__()
         self.ui = Ui_MainWindow() #This from your UI class
         self.ui.setupUi(self)  #Initialize your UI
         self.signal_connect() #a self-written function that handle signal and slots

     def signal_connect(self)
         self.ui.updateButton.clicked.connect(self.update_table_view) 
         #or you could have lineEdits with return pressed signal as what I explained in previous answer.

     def update_table_view(self):
         #get all the texts first
         data = self.retrieve_all_line_edit()

         #update your table view, you have to fill this bit of code by yourself. I just give you an example here.
         self.ui.tableView.appendRow(data)

您可以通过self.ui(UI类的实例)对UI组件执行所有操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM