多语言展示
当前在线:247今日阅读:82今日分享:48

在Qt Creator中写一般/包含元对象系统的C++代码

这则经验解决的问题:如何在Qt Creator中写一般的C++代码,并在这些代码中使用Qt的元对象系统呢?(包含属性系统、信号与槽系统等)其实Qt对标准C++进行了一个扩展(如元对象系统、对象属性、信号与槽系统)。之所以C++编译器能够理解这些扩展的内容,是因为Qt源代码在编译前,会经过一个元对象编译器(Meta-Object Compiler, MOC)进行一个预处理,将带有Qt特性的程序转化为标准的C++程序。所以如果我们希望在一般的C++程序中使用Qt的特性,仅仅需要修改一下我们当前项目的配置文件即可。
工具/原料
1

Qt Creator

2

MinGW或MSVC201*编译器

方法/步骤
1

首先我们创建一个不包含Qt特性的,普通的C++项目。

2

然后我们双击.pro项目管理文件。

4

到这一步已经算是配置完成了,但是我们还需要注意在之后我们编写子类时,需要继承自QObject基类。

5

这里贴一段简单的测试代码,表明我们成功的在一般的C++代码中使用了Qt的特性。项目树如下:

6

//main.h#ifndef MAIN_H#define MAIN_H #include #include #include  #include #include  using std::cin;using std::cout;using std::endl; #endif // MAIN_H

7

//myclass.h#ifndef MYCLASS_H#define MYCLASS_H #include  class myclass : public QObject{    Q_OBJECT    Q_PROPERTY(QString myname_same MEMBER myname)private:    QString myname;public:    explicit myclass(QObject *parent = nullptr);    void setname(const QString &str_1);    void showname();signals: public slots: }; #endif // MYCLASS_H

8

//main.cpp#include 'myclass.h' using namespace std; int main(){    myclass *p = new myclass;    p->showname();    p->setname('2333333333');    p->showname();    p->setProperty('myname_same','zxy');    cout<<'myname_same:'<<((p->property('myname_same')).toString()).toStdString()<showname();    delete p;     return 0;}

9

//myclass.cpp#include 'myclass.h' myclass::myclass(QObject *parent) : QObject(parent){    myname='233';} void myclass::setname(const QString &str_1) {    myname = str_1;} void myclass::showname() {    cout <<'myname:'<< myname.toStdString() << endl;}

10

运行结果:OK~!

推荐信息