qt的信号和槽 网上有很多代码。就是定义两个函数。一个是信号函数。一个是槽函数。连起来就能用了;
一个是插头。一个是插座。插上就有电了。
设计的绝妙啊;
可是我觉得麻烦啊
我需要一个简单的机制。弄个信号槽的大全。在工程里面那里都能随便用。不要每次需要的时候才去定义信号和槽函数。那多麻烦。我就想一次定义。到处使用。免得下次还去找怎么定义
这样才能让老子满意。否则那些机制多难记i啊。
最简单的就是我需要传递消息。传递值。定义一次。很多地方都抓起来就用。
怎么实现呢。两个类 。
先创建一个类 。这个是为了发消息;
ZXGlobalSendMsg类的头文件
#ifndef ZXGLOBALSENDMSG_H
#define ZXGLOBALSENDMSG_H
#include <QObject>
class ZXGlobalSendMsg : public QObject
{
Q_OBJECT
public:
explicit ZXGlobalSendMsg(QObject *parent = 0);
signals:
void sendData(const QString strmsg);//对。最关键的是这个。我要发送数据;。当然了。函数的参数你可以随便定义。可以是结构体。指针。数组列表等等都可以;
public slots:
};
#endif // ZXGLOBALSENDMSG_H
cpp里面可什么都没用到写的
#include "zxglobalsendmsg.h"
ZXGlobalSendMsg::ZXGlobalSendMsg(QObject *parent) : QObject(parent)
{
}
再来一个类XGlobal。这个是我最常用的编码风格了。就是我习惯了写很多静态函数。常用的函数在这个类里面
以后任何地方包含了这个类的头文件。然后两个点就可以用函数鸟。。。。。
#include <qDebug>
#include <QFile>
#include "QComboBox.h"
#include "ZXGlobalSendMsg.h"
class XGlobal : public QObject
{
Q_OBJECT
public:
~XGlobal();
static ZXGlobalSendMsg mZXGlobalSendMsg;//这个就是那个信号所在的类;
public slots:
static void mShowMessage(const QString strmsg);//这个就是我任何地方要发送消息或者传递值的函数。就是任何地方。我调用这个函数。就把消息发出去了;
};
cpp文件里面只有一个函数;
void XGlobal::mShowMessage(const QString strmsg)
{
emit mZXGlobalSendMsg.sendData(strmsg);
// XSystemParam::pmXGlobal->showMessage(strmsg);
}
以后任何地方我都这么发消息就好。头文件一包括。就调用这个就行;
对啊消息发了。发到那里去了呢
对,我常常要在mainwindow 里面显示。
MainWindow的构造函数如下;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QObject::connect(&XGlobal::mZXGlobalSendMsg,SIGNAL(sendData(QString)),this,SLOT(receiveOtherWndData(QString)));//
//没错。这是信号和槽关联的地方;
}
void MainWindow::receiveOtherWndData(const QString data)
{
showMessage(data); //获取传递过来的数据
}
//真正显示的地方在这里;拿到了消息。你爱怎么折腾都行;我是显示到界面的列表里;
void MainWindow::showMessage(QString strmsg)
{
if(myListInfo->count()>3000)
{
myListInfo->clear();
}
QListWidgetItem*item=new QListWidgetItem;
item->setText(strmsg);
//设置列表项的文本
myListInfo->addItem(item); //加载列表项到列表框
}
好了。到现在为止,一切都好了。使用很简单了;
#include "XGlobal.h"
XGlobal::mShowMessage("查看关于信息");
先包括头文件。然后任何地方都可以
XGlobal::mShowMessage
是不是很方便就在任何地方把消息都发送到主窗口了?
理解了没?
宋世鹏宇宙信息网 。看多了宇宙之书。编程就懒惰起来了。就喜欢一次编写。到处使用 ;;