您需要使用您的.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()
。
謝謝你,安德烈亞斯!現在走最簡單的方法......事實上,ui_about.h沒有創建,現在也不是預設的。因此,您首先指定的代碼的項目不會編譯。有沒有辦法手動創建ui_about.h? –
你可以用'uic about.ui -o ui_about.h'手動創建它。但是你的構建系統應該照顧它 - 確保你的'.pro'文件中包含'FORMS = about.ui'。 –
.pro文件中是否有任何奇怪的條目?前段時間有一個類似的問題,資源文件沒有被創建:http://stackoverflow.com/questions/12380171/qmake-not-generating-binary-resource-files/12431570#12431570 –