Qt創建對話框的三種方法(優先選擇方法1)

1.使用Qt Designer界面編輯器設計:可直接拖放控件、設置控件的屬性,簡單、直觀、易於操作;因而在實際使用時,常常使用 Qt Designer繪製界面,然後添加額外的代碼進行更爲完善的設計。
2.手工編寫代碼 創建界面此方法比較複雜,不夠直觀; 
3.動態加載UI文件並生成界面:此方法很靈活,當需要更改界面時只需更改.UI文件即可,無需重新編譯程序。

1.使用Qt Designer設計界面

  採用Qt Designer,使得快速創建對話框成爲可能。在Qt Designer環境中,所有的操作都採用可視化的操作,可拖放控件、關聯信號與槽、設置特定控件的屬性。 
  步驟:1.用qt creator 設計師創建對話框生成findDialog.ui文件 
  2.在qt安裝包尋找Qt 5.4 64-bit for Desktop (MSVC 2013),然後進入工程項目所在的文件夾,使用指令uic -o ui_findDialog.h findDialog.ui生成對應的頭文件 
  3.分別使用指令qmake -project、qmake、make(不行的話點擊qt creator中的運行按鈕 ) 
操作步驟:
(1)打開軟件後,點擊【New Project
(2)選擇項目下的【應用程序】,然後在右側選擇【Qt Widgets Application】,然後點擊右下角的【Choose
(3)輸入項目的名稱helloQt,選擇好路徑,然後“下一步”,
(4)保持默認,繼續下一步
(5)輸入自己定義的類名;選擇基類爲QDialog勾選創建界面;注意:這裏要細心點,因爲點擊下一步後,不能返回上一步。想改項目的類名或基類,只能重新新建了
(6)點擊“完成,項目就建立成功了。按“F5運行就可以看到空的對話框啦
(7)雙擊界面文件下的.ui文件,就可以進行界面設計啦

2.手工代碼實現設計界面

  使用手工創建代碼時,需要從Qt已有的GUI類庫中選擇一個類作爲基類繼承,並且添加必要的其它成員。通常,我們會選QDialog、QWidget、QMainWindow等類中選擇一個作爲主窗體;然後創建其它的控件,並使用佈局管理器佈局這些控件;最後將該佈局設置爲主窗體的佈局。 
  例如,對於FindDialog對話框,就可以通過從QDialog繼承,並添加按鈕、佈局管理器等到派生類中完成該對話框的設計。
class FindDialog : public QDialog
{
    Q_OBJECT
public:
    FindDialog(QWidget *parent = 0);
signals:
    void findNext(const QString &str, Qt::CaseSensitivity cs);
    void findPrevious(const QString &str, Qt::CaseSensitivity cs);
private slots:
    void findClicked();
    void enableFindButton(const QString &text);
private:                                                       // 窗體中的控件
    QLabel *label;
    QLineEdit *lineEdit; 
    QCheckBox *caseCheckBox;
    QCheckBox *backwardCheckBox;
    QPushButton *findButton;
    QPushButton *closeButton;
};
FindDialog::FindDialog(QWidget *parent)
    : QDialog(parent)
{
   // 下面的代碼創建窗體中的控件
    label = new QLabel(tr("Find &what:"));
    lineEdit = new QLineEdit;
    label->setBuddy(lineEdit);
    caseCheckBox = new QCheckBox(tr("Match &case"));
    backwardCheckBox = new QCheckBox(tr("Search &backward"));
    findButton = new QPushButton(tr("&Find"));
    findButton->setDefault(true);
    findButton->setEnabled(false);
    closeButton = new QPushButton(tr("Close"));
    connect(lineEdit, SIGNAL(textChanged(const QString &)),
            this, SLOT(enableFindButton(const QString &)));
    connect(findButton, SIGNAL(clicked()),
            this, SLOT(findClicked()));
    connect(closeButton, SIGNAL(clicked()),
            this, SLOT(close()));
    // 使用佈局管理器佈局控件
    QHBoxLayout *topLeftLayout = new QHBoxLayout;
    topLeftLayout->addWidget(label);
    topLeftLayout->addWidget(lineEdit);
    QVBoxLayout *leftLayout = new QVBoxLayout;
    leftLayout->addLayout(topLeftLayout);
    leftLayout->addWidget(caseCheckBox);
    leftLayout->addWidget(backwardCheckBox);
    QVBoxLayout *rightLayout = new QVBoxLayout;
    rightLayout->addWidget(findButton);
    rightLayout->addWidget(closeButton);
    rightLayout->addStretch();
    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(leftLayout);
    mainLayout->addLayout(rightLayout);
    // 設置窗口的佈局管理器
    setLayout(mainLayout); 
     setWindowTitle(tr("Find"));
    setFixedHeight(sizeHint().height());
}
3.動態加載UI文件並生成界面
  前面的兩種方法需要事先創建好相應的文件或代碼,然後連同其它文件進行編譯,如果後期要修改界面則必須修改代碼或UI文件並重新編譯。 
  而不需要重新編譯整個程序的方法是採用動態加載UI文件的方式。基本的操作方法爲先使用Qt Designer設計界面,之後就可以採用QUILoader類動態加載該文件,並生成該窗體。 
#include <QUiLoader>
#include <QFile>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QUiLoader loader;
    QFile file("mainwindow.ui");
    loader.load(&file)->show();
    return a.exec();
}
上面的代碼中UiLoader::load()使用了QFile對像作爲數據源,並且會生成QWidget對像,最後使用了QWidget::show()顯示上圖中的窗體界面。
 **Qt += uitools**
小結:綜合前面的分析來看,使用手工設計界面的方法最爲繁瑣、複雜;使用Qt Designer設計界面最靈活、直觀、快速;而採用動態加載.ui文件的方法則可以做到在需要修改.ui文件時不需要重新編譯程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章