2017-04-21 48 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

相關問題