Qt Creator:对象模型

来源:互联网 发布:编程证书 编辑:程序博客网 时间:2024/06/05 01:55

这里写图片描述

这里写图片描述

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

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

信号与槽的基本用法:

newapaper.h#ifndef NEWAPAPER_H#define NEWAPAPER_H#include <QObject>class Newspaper : public QObject{    Q_OBJECTpublic:    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_OBJECTpublic:    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.

原创粉丝点击