2017-04-21 47 views
0

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

回答

1

由于没有源代码,我只是根据我以前的经验给你我的意见。有两种方式来实现信号和插槽。一种是,您可以为所有lineEdit拥有多个“returnPressed”信号,并将其连接到一个插槽,我们可以将其命名为“retrieve_all_line_edits”,以获取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来解释这一点。

+0

非常感谢你,愚蠢的我没有想到这件事,我一直在这一整天都在努力,所以我不介意这么模糊......还要在python中编写它,特别感谢你给出了一个简短的python例子。 – user21398

+0

我一直在想一点,并偶然发现另一个问题。现在我已经完成了这个任务,如何将这些新值传递给我的模型,以便它可以在我的QTableView中更新? – user21398

0

正如我所说我以前没有使用过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类的实例。

+0

问题是我不知道我可以使用哪些qt函数来填充表格列。我如何将这个新的字符串列表传递给我的模型,以便它可以更新? – user21398

相关问题