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