Qt Creator:对象模型

这里写图片描述

这里写图片描述

QMessageBox 详解:
这里写图片描述
通过QMessageBox提一个问题,这个是模态对话框。

制作一个询问是否保存的对话框:
这里写图片描述
这里写图片描述

信号与槽的基本用法:

newapaper.h
#ifndef NEWAPAPER_H

#define NEWAPAPER_H

#include <QObject>

class Newspaper : public QObject
{
    Q_OBJECT
public:
    Newspaper(const QString &name)
    {
        m_name = name;
    }

    void send() const
    {
        emit newPaper(m_name);
    }

signals:
    void newPaper(const QString &name) const;

private:
    QString m_name;
};

#endif // NEWAPAPER_H

--------------------华丽的分割线------------------------

reader.h
#ifndef READER_H

#define READER_H

#include <QObject>
#include <QDebug>

class Reader : public QObject
{
    Q_OBJECT
public:
    Reader() {}

    void receiveNewspaper(const QString &name) const
    {
        qDebug()<< "Receives Newspaper:" << name;
    }
};

#endif // READER_H

--------------------华丽的分割线------------------------

#include <QApplication>
#include "newapaper.h"
#include "reader.h"

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);

    Newspaper newspaper("Newspaper A");
    Reader reader;
                                                        QObject::connect(&newspaper,&Newspaper::newPaper,&reader,&Reader::receiveNewspaper);
    newspaper.send();
    return app.exec();
}

如果有重载的信号函数比如:

void newPaper(const QString &name,const QDate &date);

我们的处理方式可以像是Qt4一样写SIANGAL和SLOT宏来连接链接信号函数和槽函数,

QObject::connect(&newspaper,SIGNAL(newPaper(QString,QDate)),&reader,SLOT(receiveNewspaper(QString,QDate)));

因为Qt4的信号槽连接是带参数的。因此,Qt能自己判断清楚究竟是哪一个信号对应了哪一个槽。

如果不是用Qt4的宏,我们可以这么解决:
使用一个函数指针来指明到底是哪一个信号:

void (Newspaper:: *newPaperNameDate)(const QString &,const QDate &) = &Newspaper::newPaper;

QObject::connect(&newspaper,newPaperNameDate,&reader,&Reader::receiveNewspaper);

这样我们使用函数指针newPaperNameDate声明了一个带有QString和QDate两个参数,返回值是void的函数,将该函数作为信号与Reader::receiveNewspaper()槽连接,这样就避免了重载带来的不明性。
或者这样写,只是声明了一个匿名的函数指针
这里写图片描述

再或者是下面的C++的方法:
这里写图片描述
static_cast用于数值类型之间或者void * 和别的 * 之间(转换)。

有什么问题加我QQ:839505138.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值