2012-03-06 65 views
-3

以下代碼應調用MainWindow函數,但它不調用它。我正在使用QT IDE。QDialog不調用MainWindow函數

#include "itemdialog.h" 
#include "ui_itemdialog.h" 
#include "mainwindow.h" 

ItemDialog::ItemDialog(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::ItemDialog) 
{ 
    ui->setupUi(this); 
    setWindowTitle("Status Dialog"); 

} 

ItemDialog::~ItemDialog() 
{ 
    delete ui; 
} 

void ItemDialog::on_pushButton_clicked() 
{ 
    MainWindow *obj=new MainWindow; 
    obj->okbuttonclicked(ui->lineEdit->text()); 
} 

的okbuttonclicked()函數在MainWindow.This對話框實現是不應該打開一個新的窗口。它的功能只是將用戶輸入的內容返回給MainWindow函數。

這段代碼有什麼問題。請幫忙!

+0

你試過fire:obj-> show()之後obj-> okbuttonclicked [...]? – neciu 2012-03-06 13:26:32

+0

我爲什麼要調用obj-> show(),窗口已經打開。這個對話框只是爲了接受用戶的輸入,然後將它傳遞給MainWindow函數,以便採取進一步的行動。 – scorpion 2012-03-06 13:29:22

+0

當按下對話框按鈕時,您的代碼是否應該創建一個新的主窗口...? – cmannett85 2012-03-06 13:33:07

回答

1

您正在創建一個新的(不可見的)主窗口,並調用okbuttonclicked()而不是已打開的窗口。您需要將現有的QMainWindow傳遞到對話框中,如果它是模態的,則應將其用作父對話框。否則,創建一個新的構造函數arg來攜帶它。

+0

我已通過Qmainwindow作爲Qdialog的父項。現在我怎樣才能使用父母(Qmainwindow)來調用它的功能。你能不能請告訴我編碼 – scorpion 2012-03-06 13:46:31

+0

Koying在他的回答中已經向你展示了。但是teukkam的回答是一個更合適的解決方案。 – cmannett85 2012-03-06 13:48:50

0

骯髒的,但如果你的QMainWindow是你的了QDialog的父母,你可以這樣做:

void ItemDialog::on_pushButton_clicked() 
{ 
    MainWindow *obj=qobject_cast<QMainWindow*>(parent()); 
    if (obj) 
     obj->okbuttonclicked(ui->lineEdit->text()); 
} 
2

這看起來像在實現輸入對話框一個可怕的嘗試。您應該發出一個確認用戶已經輸入的信號,並將該信號連接到MainWindow中的適當插槽,並將該信號連接到MainWindow的構造函數中。此外,如果您只是在模態對話框中獲得單個字符串,則不應該重新發明輪子,而應使用QInputDialog