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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章