QT5学习笔记day1–hello world与slot
hello world
#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel label("hello world");
label.show();
QPushButton button("quit");
//QObject::connect(&button,&QPushButton::clicked,&QApplication::quit);
QObject::connect(&button,SIGNAL(clicked()),&a,SLOT(quit()));
button.show();
return a.exec();
}
分析:
1.QT是一个和BCB6很像的C++窗口开发程序,里面集成了众多的窗口类。
2.窗口化程序QApplication是主窗口
QApplication a(argc, argv):构建并调用构造函数
return a.exec():使窗口无限自循环(main函数因此不会退出,使得窗口一直存在)
3.初识QButton,QLabel,都是窗口中的控件,构造并显示如图所示
4.slot:QT的特色,观察者模式,调用方法为:
QObject::connect(&button,&QPushButton::clicked,&QApplication::quit)
slot最常用的一般形式:
connect(sender, signal,
receiver, slot);
表示sender发出signal后receiver产生slot响应,
具体上例则是,button被click后执行主窗口quit。
QT中的slot也可以自己定义,称为自定义信号槽
自定义信号槽
newspaper.h
#ifndef NEWSPAPER_H
#define NEWSPAPER_H
#include <QObject>
```cpp
class newspaper:public QObject
{
Q_OBJECT
public:
newspaper(const QString &name):m_name(name){};
void send(){
emit newpaper(m_name);
}
signals:
void newpaper(const QString &name);
private:
QString m_name;
};
#endif // NEWSPAPER_H
reader.h
#ifndef READER_H
#define READER_H
#include <QObject>
#include <QDebug>
#endif // READER_H
class reader:public QObject{
Q_OBJECT
public:
reader(){}
void receiveNewspaper(const QString &name){
qDebug()<<"receive newspaper:"<<name;
}
};
main.cpp
#include "mainwindow.h"
#include "newspaper.h"
#include "reader.h"
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication app(argc,argv);
newspaper news("Newspaper A");
reader readers;
QObject::connect(&news,&newspaper::newpaper,&readers,&reader::receiveNewspaper);
news.send();
return app.exec();
}
分析:
1.定义了两个类,报纸和读者,要完成的操作是,报纸一旦产生新的报纸,读者就读出这个报纸名并显示,本例中观察者为读者
2.报纸构造函数,传参为新的报纸名,实例化时传入这个新的报纸名
3.signal:关键字,即为connect中的signal
4.emit:调用某个函数时提交signal,比如button被点击时提交clicked,newspaper send被调用时提交newpaper
5.继承object类注意:Q_OBJECT