2012-10-29 62 views
16

我想要製作一個簡單的'關於'模式對話框,從幫助 - >關於應用程序菜單中調用。我用QT Creator(.ui文件)創建了一個模態對話窗口。Qt顯示菜單項上的模式對話框(.ui)點擊

什麼代碼應該在菜單'關於'插槽?

現在我有這樣的代碼,但它表明了一個新的模式對話框(不是基於我的about.ui):

void MainWindow::on_actionAbout_triggered() 
{ 
    about = new QDialog(0,0); 
    about->show(); 
} 

謝謝!

回答

26

您需要使用您的.ui文件中的UI設置對話框。 Qt uic編譯器會從您的代碼中包含的.ui文件生成頭文件。假定您的.ui文件被稱爲about.ui,並且對話框被命名爲About,則uic創建文件ui_about.h,其中包含類Ui_About。有不同的方法來設置你的用戶界面,在最簡單的,你可以做

#include "ui_about.h" 

... 

void MainWindow::on_actionAbout_triggered() 
{ 
    about = new QDialog(0,0); 

    Ui_About aboutUi; 
    aboutUi.setupUi(about); 

    about->show(); 
} 

更好的方法是使用繼承,因爲它封裝了你的對話更好,這樣就可以實現特定範圍內的特定對話的任何功能子類:

AboutDialog.h:

#include <QDialog> 
#include "ui_about.h" 

class AboutDialog : public QDialog, public Ui::About { 
    Q_OBJECT 

public: 
    AboutDialog(QWidget * parent = 0); 
}; 

AboutDialog.cpp:

AboutDialog::AboutDialog(QWidget * parent) : QDialog(parent) { 

    setupUi(this); 

    // perform additional setup here ... 
} 

用法:

#include "AboutDialog.h" 

... 

void MainWindow::on_actionAbout_triggered() { 
    about = new AboutDialog(this); 
    about->show(); 
} 

在任何情況下,重要的代碼是調用setupUi()方法。

BTW:您在上面的代碼中的對話框是非模態的。要顯示模式對話框,請將對話框的windowModality標誌設置爲Qt::ApplicationModal或使用exec()而不是show()

+0

謝謝你,安德烈亞斯!現在走最簡單的方法......事實上,ui_about.h沒有創建,現在也不是預設的。因此,您首先指定的代碼的項目不會編譯。有沒有辦法手動創建ui_about.h? –

+1

你可以用'uic about.ui -o ui_about.h'手動創建它。但是你的構建系統應該照顧它 - 確保你的'.pro'文件中包含'FORMS = about.ui'。 –

+0

.pro文件中是否有任何奇怪的條目?前段時間有一個類似的問題,資源文件沒有被創建:http://stackoverflow.com/questions/12380171/qmake-not-generating-binary-resource-files/12431570#12431570 –

4

對於模態對話框,您應該使用QDialogs的exec()方法。

about = new QDialog(0, 0); 

// The method does not return until user closes it. 
about->exec(); 

// In this point, the dialog is closed. 

Docs說:

最常見的方法來顯示一個模式對話框調用它的exec()功能。當用戶關閉對話框時,exec()將提供有用的返回值。


替代辦法:你需要一個模式對話框。讓對話顯示無模式,並將其accepted()rejected()信號連接到適當的插槽。然後你可以把所有的代碼放在接受的位置,而不是放在show()之後。所以,用這種方式,你實際上不需要模態對話框。

相關問題