浅谈VC中使用Qt库之二

来源:互联网 发布:天时网络电玩城 编辑:程序博客网 时间:2024/06/05 08:44

前面我们在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是二进制级别的文件 所以与语言无关,是较好的设计方案。


0 0
原创粉丝点击