1. 程式人生 > >VS2015無法自動生成ui_test.h

VS2015無法自動生成ui_test.h

首先右鍵ui檔案選擇編譯,然後VS就會自動在GeneratedFiles資料夾下生成ui_***.h

1.首先把ui檔案放到專案的當前路徑下.
2.在專案中載入該ui檔案,然後先編譯一下.
3.在你已經寫好的h檔案中引用它.比如命名為test.ui.則如下引用.#include "ui_test.h", 你也可以在專案檔案中的GeneratedFiles中找到該檔案.
4.在h檔案的類中加入下面程式碼.把ui檔案的名稱空間拉過來.

 Ui::Form ui;

實在不懂的.可以在GeneratedFiles檔案下的ui_test.h檔案,使用文字編輯器去開啟,我一般使用Notepad++.
可以清楚的看到,這個ui檔案其實就是一個普通的類檔案,只不過把所有的東西都放在了Ui_Form這個類中.最後在Ui這個名稱空間內去定義了一個繼承Ui_Form這個類的派生類.

 class Ui_Form
{
public:
    QPushButton *pushButton;
    QPushButton *pushButton_2;

    void setupUi(QWidget *Form)
    {
        if (Form->objectName().isEmpty())
            Form->setObjectName(QStringLiteral("Form"));
        Form->resize(400, 300);
        pushButton = new QPushButton(Form);
        pushButton->setObjectName(QStringLiteral("pushButton"));
        pushButton->setGeometry(QRect(130, 80, 75, 23));
        pushButton_2 = new QPushButton(Form);
        pushButton_2->setObjectName(QStringLiteral("pushButton_2"));
        pushButton_2->setGeometry(QRect(130, 190, 75, 23));

        retranslateUi(Form);

        QMetaObject::connectSlotsByName(Form);
    } // setupUi

    void retranslateUi(QWidget *Form)
    {
        Form->setWindowTitle(QApplication::translate("Form", "Form", 0));
        pushButton->setText(QApplication::translate("Form", "PushButton", 0));
        pushButton_2->setText(QApplication::translate("Form", "PushButton", 0));
    } // retranslateUi

};

namespace Ui {
    class Form: public Ui_Form {};
} // namespace Ui

5.在.cpp檔案中,ui.setupUi(this);呼叫類方法去通過ui初始化佈局.
6.重新編譯一下.可以發現在當前路徑的Debug資料夾中生成了這麼一個檔案,叫做moc_c.cpp.這個是一個元檔案.moc檔案就是由C++程式碼去解釋Qt的一些關鍵詞後最終的C++程式碼片段.他有一個前提,類中必須包含Q_OBJECT這個巨集.它把Qt中的訊號與槽機制用C++中的回撥函式來實現.可以使用Notepad++去看最終的程式碼.
7.之後就可以正常使用啦~如果要進行ui檔案和類檔案的移值.出現問題的話,可以直接把moc檔案也順便一起帶過去.這樣有時可以解決一些問題.
全程手打,望採納,謝謝.