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

时间:2017-04-21 00:18:15

标签: python qt pyqt pyqt4

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

2 个答案:

答案 0 :(得分:1)

由于没有源代码,我只根据我之前的经验给出您的意见。有两种方法可以实现信号和插槽。一个是你可以有几个" returnPressed"所有lineEdits的信号并将其连接到一个插槽,我们可以将其命名为#34; 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)

另一个是你可以点击一个按钮"点击"信号,并做与第一个相同的检索。

updateButton.clicked.connect(retrieve_all_line_edits)

retrieve_all_line_edits与上面相同。

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

答案 1 :(得分:0)

正如我之前所说,我之前没有使用过QTableView,我无法准确回答你的问题。但是我用google搜索了它,它可能是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组件执行所有操作,self.ui是UI类的实例。