qt的信号和槽

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
是不是很方便就在任何地方把消息都发送到主窗口了?

理解了没?


宋世鹏宇宙信息网 。看多了宇宙之书。编程就懒惰起来了。就喜欢一次编写。到处使用 ;;




posted @ 2017-11-29 05:29  宋世鹏宇宙信息  阅读(916)  评论(0编辑  收藏  举报