2012-04-13 44 views
6

Tôi đang cố mở một hộp thoại mới Cửa sổ từ hộp thoại hiện có trên một sự kiện nhấn nút, nhưng tôi không thể thực hiện việc này khi tôi mở cửa sổ hộp thoại từ MainWindow.Mở hộp thoại mới từ hộp thoại trong qt

tôi đang cố gắng với:

Dialog1 *New = new Dialog1(); 

New->show(); 

Có cách nào khác mở hình thức cửa sổ hộp thoại Window thoại hiện ???

+0

đừng quên ẩn hộp thoại trước đây-> ẩn(); –

Trả lời

8

Phải có một số vấn đề khác, vì mã của bạn có vẻ tốt với tôi. Đây là cách tôi muốn làm điều đó:

#include <QtGui> 

class Dialog : public QDialog 
{ 
public: 
    Dialog() 
    { 
     QDialog *subDialog = new QDialog; 
     subDialog->setWindowTitle("Sub Dialog"); 
     QPushButton *button = new QPushButton("Push to open new dialog", this); 
     connect(button, SIGNAL(clicked()), subDialog, SLOT(show())); 
    } 
}; 

class MainWindow : public QMainWindow 
{ 
public: 
    MainWindow() 
    { 
     Dialog *dialog = new Dialog; 
     dialog->setWindowTitle("Dialog"); 
     dialog->show(); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    MainWindow w; 
    w.setWindowTitle("Main Window"); 
    w.show(); 

    return a.exec(); 
} 

Bằng cách này, lưu ý làm thế nào tôi đã kết nối "nhấp vào" tín hiệu QPushButton để "show" khe QDialog của. Rất tiện dụng.

1

Tôi mới sử dụng QT và tôi cũng gặp vấn đề tương tự. Trong trường hợp của tôi, tôi đang gọi hộp thoại mới từ một hàm từ hộp thoại chính. Tôi đã sử dụng dlg->show mà không đợi cho đến khi kết quả của hộp thoại mới. Do đó chương trình vẫn chạy. Tôi thay đổi dlg->show cho dlg->exec và hộp thoại hoạt động ngay bây giờ. Trong mã của bạn, hộp thoại có vẻ là một biến cục bộ, có lẽ bạn có cùng một vấn đề. Tùy chọn khác có thể là sử dụng con trỏ tĩnh thay thế.

Dialog1 *newDlg = new Dialog1(); 
this->hide(); 
int result = newDlg->exec(); 
this->show(); 
delete newDlg; 
0

trong tập tin mainwindow.h bạn nên khai báo một con trỏ đến mới thoại bạn và bao gồm các dialog.h mới như

#include <myNewDialog.h> 

private: 
    Ui::MainWindow *ui; 
    MyNewDialog *objMyNewDialog; 

và sau đó bạn có thể gọi thoại của bạn sẽ được hiển thị lên trong mainwindow.cpp như

void MainWindow::on_btnClose_clicked() 
{  
    objMyNewDialog= new MyNewDialog(this); 
    objMyNewDialog->show(); 
} 
Các vấn đề liên quan