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");
}
};