1. main函数介绍
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
//自定义类:继承QWidget类
class MyWidget : public QWidget
{
Q_OBJECT
public:
//构造函数,用参数初始化父类
MyWidget(QWidget *parent = 0);
//析构函数
~MyWidget();
};
#endif // MYWIDGET_H
mywidget.cpp
#include "mywidget.h"
//构造函数
MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{
}
//析构函数
MyWidget::~MyWidget()
{
}
main.c
#include "mywidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
//应用程序类,创建一个应用程序的对象
QApplication a(argc, argv);
//创建一个自定义窗口对象
MyWidget w;
//显示窗口
w.show();
//循环机制
return a.exec();
}
2. 命名规范和快捷方式
2.1 pro文件的含义
day01.pro
QT += core gui //包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于Qt4版本 才包含widget模块
TARGET = QtFirst //应用程序名 生成的.exe程序名称
TEMPLATE = app //模板类型 应用程序模板
SOURCES += main.cpp\ //源文件
mywidget.cpp
HEADERS += mywidget.h //头文件
2.2 命名规范
- 类:首字母大写,每个字母大写;
- 变量和函数:首字母大写,其他字母小写;
2.3 常用快捷键
ctrl r
运行
ctrl i
注释
ctrl f
查找
3. 按钮及窗口常用接口
MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{
//1.创建按钮
QPushButton *btn1 = new QPushButton;
//2.设置按钮的父窗口
btn1->setParent(this);
//3.设置文本
btn1->setText("孙悟空");
//4.定义第二个按钮
QPushButton *btn2 = new QPushButton("猪八戒", this);
//5.设置窗口大小
resize(600, 400);
//6.移动按钮
btn2->move(100, 100);
//7.设置窗口名字
this->setWindowTitle("第一个窗口");
//8.固定窗口大小
this->setFixedSize(600, 400);
}
4. 对象树
1. 无需delete对象
QPushButton
类继承QWidget
类继承QObject
类,因此new
出来的对象无需delete
;- 通过创建一个自定义类来继承
QPushButton
类,来验证是否需要delete
析构该类的对象。
MyQpushButton.h
#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H
#include <QWidget>
#include <QPushButton>
class MyPushButton : public QPushButton
{
Q_OBJECT
public:
explicit MyPushButton(QPushButton *parent = 0);
~MyPushButton();
signals:
public slots:
};
#endif // MYPUSHBUTTON_H
MyQpushButton.cpp
#include "mypushbutton.h"
#include <QPushButton>
#include <QDebug>
MyPushButton::MyPushButton(QPushButton *parent) : QPushButton(parent)
{
}
MyPushButton::~MyPushButton()
{
qDebug() << "MyPushButton析构函数";
}
widget.cpp
#include "widget.h"
#include <QPushButton>
#include <mypushbutton.h>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
MyPushButton *btn3 = new MyPushButton;
btn3->setParent(this);
btn3->setText("沙悟净");
btn3->move(100,300);d
}
Widget::~Widget()
{
}
5. 信号与槽
1. 基本原理
//1.创建按钮
MyPushButton *btn3 = new MyPushButton;
btn3->setParent(this);
btn3->setText("关闭窗口");
btn3->move(100,300);
/*信号与槽*/
connect(btn3, &MyPushButton::clicked, this, &MyWidget::close);
2. 自定义信号和槽
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<teacher.h>
#include <student.h>
class Widget : public QWidget
{
Q_OBJECT
public:
//1.创建指针
Teacher* tc;
Student* st;
//7.触发信号函数声明
void trigger();
Widget(QWidget *parent = 0);
~Widget();
};
#endif // WIDGET_H
teacher.h
#ifndef TEACHER_H
#define TEACHER_H
#include <QObject>
class Teacher : public QObject
{
Q_OBJECT
public:
explicit Teacher(QObject *parent = 0);
signals:
//3.自定义信号函数声明
void mySingal();
public slots:
};
#endif // TEACHER_H
student.h
#ifndef STUDENT_H
#define STUDENT_H
#include <QObject>
class Student : public QObject
{
Q_OBJECT
public:
explicit Student(QObject *parent = 0);
signals:
public slots:
//4.自定义槽函数声明
void mySlots();
};
#endif // STUDENT_H
widget.cpp
#include "widget.h"
#include<teacher.h>
#include <student.h>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//2.指针指向对象
this->tc = new Teacher(this);
this->st = new Student(this);
//6.连接函数
connect(tc, &Teacher::mySingal, st, &Student::mySlots);
//9.调用触发信号函数
trigger();
}
//8. 触发信号函数实现
void Widget::trigger()
{
emit this->tc->mySingal();
}
Widget::~Widget()
{
}
student.cpp
//5.自定义槽函数实现
void Student::mySlots()
{
qDebug() << "自定义槽函数";
}
3. 重载信号与槽函数
//3.1重载信号函数
void mySingal(QString qs);
//4.1重载槽函数
void mySlots(QString qs);
void Student::mySlots(QString qs)
{
qDebug() << "自定义槽函数" << qs.toUtf8().data();
}
//6.1重载信号和槽函数后的连接函数
void (Teacher::*MySingal)(QString) = &Teacher::mySingal;
void (Student::*MySlots)(QString) = &Student::mySlots;
connect(tc, MySingal, st, MySlots);
emit this->tc->mySingal("重载信号和槽");