0
点赞
收藏
分享

微信扫一扫

CodeBlocks QT5 消息处理中Q_OBJECT的解决办法

炽凤亮尧 2022-03-27 阅读 58
c++

QObject::connect(ui->pushButton,SIGNAL(clicked()),mes,SLOT(a()));

其中的第一个参数为发送消息对象,第二个参数为发送消息函数,第三个参数为连接消息对象,第四个参数为连接消息函数。发送或连接消息对象必须为QObject类或其子类,发送或连接消息函数为消息对象的类成员函数。发送或连接消息函数返回值必须为void,两者的参数列表需一样。

若自定义发送消息函数或连接消息函数:1、必须将对象类设置为QObject的子类,如class Message: public QObject { };】。2、类中最开头加入【Q_OBJECT】。3、发送消息函数前加入【public Q_SIGNALS:】。3、连接消息函数前加入【public Q_SLOTS:】。

在codeblocks中,由于自定义的【Q_OBJECT、Q_SIGNALS、Q_SLOTS】需要QT编译才能进行,所以需先将自定义文件(.h)用moc编译器转换为CPP文件加入工程中,这样接下来由mingw编译器接手才能正常编译。

moc编译方法1:【开始】-->【运行】-->【CMD】-->输入命令【d:】和【chdir uncompleted projects\image processing\image processing 1】-->输入命令【moc filename.h -o filename.cpp】,若成功会生成相应的CPP文件。

moc编译方法2:先将CMD加入codeblocks的Tools里面,【Tools】-->【Configure tools】-->【Add】-->【Name: moc   Executable:C:\Windows\System32\cmd.exe】,这样在Tools里面打开的时候,就不用找路径了,然后输入命令【moc filename.h -o filename.cpp】。

一般而言,.ui通过QT生成的.h文件不要动它,因为时常要更新。故额外建立【1.h】文件加入工程,这个文件名短易于moc。

//main.cpp中加入全局ui指针

Ui_MainWindow *ui;

//1.h代码很简单,只处理消息

#include <QApplication>

#include "mainwin.h"

extern Ui_MainWindow *ui;

class Message: public QObject

{

    Q_OBJECT

public Q_SLOTS:

    void a()

    {

        ui->textBrowser->setStyleSheet("background:rgb(0,240,240);");

        printf("222\n");

    }

};

举报

相关推荐

0 条评论