1. 程式人生 > >淺談VC中使用Qt庫之二

淺談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是二進位制級別的檔案 所以與語言無關,是較好的設計方案。