2015-10-23 99 views
0

我在Qt5中使用QCreator。我在MainWindow中有lineEdit_1,在Dialog中有lineEdit_2。當用戶在lineEdit_1中輸入一個值時,該值應該自動插入到lineEdit_2中。爲了做到這一點,我已經實現瞭如下這仍然給我一個錯誤:將對話框中的值傳遞給Qt中的主窗口

void Dialog::on_lineEdit_editingFinished() 
{ 
    MainWindow main; 
    ui->lineEdit->addItem(main->lineEdit->text()); 
} 

任何幫助,將不勝感激。

+0

也許你可以嘗試用這個例子:http://www.codeprogress.com/cpp/libraries/qt/QLineEditTextChanged.php這對框TextChanged相似,你會是怎樣的事件處理程序,但一些試。 –

回答

1

有許多事情你的代碼錯誤:

  • QLinedEdit沒有一個addItem(QString)方法。它有一個setText(QString)

  • 您在堆棧上創建了MainWindow,這肯定是不對的。您需要引用您的原始主窗口,而不是創建一個新窗口。如果在創建對話框時將父對話框指向父對象,並使用qobejct_cast()將父指針強制轉換爲MainWindow *,則可以訪問原始控件指針。

  • 您使用指針語法,但MainWindow main;不是指針而是實例。

  • 您正在設置一個事件處理程序,用於何時更改對話框行編輯的內容,這與您所說的相反,因爲您說您希望主要UI行編輯中的更改爲由對話行編輯反映。

+0

我嘗試了以下,但沒有成功。我對我出錯的地方感到非常困惑。 'void Dialog :: on_lineEdit_editingFinished() { MainWindow * main; ui-> lineEdit-> setText(main-> lineEdit-> text()); }' 我甚至嘗試以下,但沒有成功: '無效對話框:: on_lineEdit_editingFinished(){ 的MainWindow 主*; connect(ui-> lineEdit,&QLineEdit :: editingFinished,this,&QComboBoxPrivate :: addItem); } ' – Sara

+0

您正在使用未初始化的指針。這不起作用,因爲它沒有指向任何東西。嘗試'MainWindow * main = qobject_cast (parent());'並在使用它之前檢查指針是否爲空。不要忘記在其創建時將對話框設置爲主窗口。你試圖建立的聯繫是沒有意義的。 – dtech

相關問題