淺談VC中使用Qt庫之二
前面我們在vc中成功使用了Qt原生控制元件QMessageBox, 如何使用非原生控制元件呢,例如我們從QDialog繼承一個類,這裡qmake沒起到元物件的轉化功能,怎麼辦呢?
我們接著在前一章的工程中開發。
1.手動編寫一個EdbParamaUi 繼承QDialog
#include <QtWidgets/QDialog>
#include <QtCore/QObject>
class EdbParamaUi : public QDialog
{
Q_OBJECT
public:
EdbParamaUi(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
~EdbParamaUi();
EdbParamaUi(const EdbParamaUi &){}
};
這裡一定要將EdbParamaUi(const EdbParamaUi &){}公有化寫出,在我的VS2013上報錯。
原始檔也非常簡單
#include "stdafx.h"
#include "EdbParamaUi.h"
EdbParamaUi::EdbParamaUi(QWidget *parent, Qt::WindowFlags f) :QDialog(parent, f)
{
setWindowTitle(QStringLiteral("這是Qt對話方塊"));
}
EdbParamaUi::~EdbParamaUi()
{
}
接下來修改程式碼為:
void CMFCApplication4Dlg::OnBnClickedButton1()
{
// TODO: 在此新增控制元件通知處理程式程式碼
//QMessageBox::information(NULL, QStringLiteral("這是Qt訊息框"), QStringLiteral("這是Qt訊息框"));
EdbParamaUi ui;
ui.exec();
}
執行出現:
我們看到無法連線到元物件,Qt的元物件轉換是通過moc來轉化的,所以我們可以手動的生成:
1.開啟cmd
2.進入Qt安裝目錄(如果寫入了環境變數就不用)
C:\Qt\Qt5.6.0\5.6\msvc2013\bin
3. 元物件檔案生成
只需要標頭檔案即可 將目標檔案改為Qt固定的格式 moc_檔名.cpp即可,這樣工程中就多了一個字首為moc_的檔案
我們需要將這個檔案加入到工程,專案右鍵-》新增-》現有項-》檔案
4. 重新執行
出現這個 是因為使用了預編譯而檔案又沒有包含預編譯標頭檔案stdafx.h, 解決方法是在所有標頭檔案中都新增#include<stdafx.h> 或者在專案配置中不使用預編譯。
再次執行 點選按鈕
已經成功執行。
注:元物件檔案除了手動生成 還可以通過QtCreator去將介面設計好並生成moc檔案 然後拷貝到自己的工程,新增到專案中,這種方法非常簡單,本人也使用此方法。
下章將Qt UI封裝在dll中供其他語言呼叫,dll是二進位制級別的檔案 所以與語言無關,是較好的設計方案。