参考
QT界面开发_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com如何学习Qt?——学习库函数的调用,了解每一个函数的功能、参数、返回值。(包含头文件)
第一天:
1、Qt的介绍
2、Qt的框架
3、项目文件(.pro)
4、第一个gt程序(hello qt)
5、父窗口和子窗口的区别(控件,部件,构件)
6、信号和槽(*)
7、坐标系统
8、内存回收机制 new delete
9、带菜单栏的窗口
10、对话框
第二天:
1、Qtcreator设计器的使用
2、常用控件
3、布局
4、自定义控件
5、常用事件的处理
第三天:
1、QPainter绘图
2、绘图设备(QPixmap,QImage,QBitmap,QPicture)
3、文件操作(QFile,QFileInfo,QDataStream,QTextStream,QBuffter)
第四天:
1、TCP编程,
2、UDP编程
3、UDP传输
4、多线程编程(多任务)
第五天上午:数据库编程
第五天下午~第六天:汽车销售管理系统
1.Qt应用程序框架
#include "widget.h"
#include <QApplication> //应用程序类
//qt头文件没有.h
//头文件和类名一样
//Q开头、前两个字母大写
int main(int argc, char *argv[])
{
//有且只有一个应用程序类的对象
QApplication a(argc, argv);
//Widget继承于QWidget,QWidget是一个窗口基类,所以Widget也是窗口类,w就是一个窗口
Widget w;
//我们写的代码
//窗口创建默认是隐藏,需要人为显示
w.show();
//让程序一直执行,等待用户操作(等待事件的发生),a是前面创建的应用程序类对象
//等价于:
//a.exec();
//return 0;
return a.exec();
}
2.父窗口与窗口
/*如果不指定父对象,对象和对象(窗口和窗口)没有关系,是独立的
* a指定b为它的父对象,a放在b的上面
* 指定父对象,有两种方式:
* 1)setparent
* 2)通过构造函数传参
* 指定父对象,只需要父对象显示,上面的子对象自动显示/
独立窗口显示
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QWidget> //窗口控件基类
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget w;
w.setWindowTitle(QString("主要看气质")); //设置标题
w.show();
QPushButton b;
b.setText("^_^"); //给按钮设置内容
b.show();
return app.exec();
}
嵌入窗口显示
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QWidget> //窗口控件基类
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget w;
w.setWindowTitle(QString("beauty")); //设置标题
//法1:指定父对象
QPushButton b;
b.setText("^_^"); //给按钮设置内容
b.setParent(&w); //指定父对象
b.move(100,100); //移动坐标
//b.show();
//法2:通过构造函数传参
QPushButton b1(&w);
b1.setText("abc");
w.show();
return app.exec();
}
注:在上面的QWidget w;中,执行QWidget 的构造函数,我们的按钮函数也应该放在构造函数下去实现。
添加到mainwindow.h(如果添加到mainwindow.cpp中,构造函数执行完后被清理,则不会在main中调用时show出来,所以要放在mainwindow.h中)
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QPushButton>
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private: //新加
QPushButton b1;
QPushButton *b2;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
b1.setParent(this); //指定父对象
b1.setText("^_^"); //给按钮设置内容
b1.move(100,100); //移动坐标
b2=new QPushButton(this); //为指针动态分配内存
b2->setText("abc");
}
MainWindow::~MainWindow()
{
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QWidget> //窗口控件基类
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow w;
//w.setWindowTitle(QString("beauty")); //设置标题
w.show();
return app.exec();
}
此时,按键按下无反应,需要connect与要跳转的内容进行连接。
3.信号与槽
信号与槽是Qt对象之间通信的接口。
mainwindow.cpp修改为:
#include "mainwindow.h"
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
b1.setParent(this); //指定父对象
b1.setText("close"); //给按钮设置内容
b1.move(100,100); //移动坐标
b2=new QPushButton(this); //为指针动态分配内存
b2->setText("abc");
//将b1的地址,即显示为close的按键,当采用pressed的方式,即按下时,功能设置为MainWindow类下面的close函数,即关闭
/* &b1:信号发出者,指针类型
* &QPushButton::pressed:处理的信号 &发送者的类名::信号名字
* this:信号接收者
* &MainWindow::close 槽函数,信号处理函数 &接收者的类名::槽函数名字
*/
connect(&b1,&QPushButton::pressed,this,&MainWindow::close);
}
MainWindow::~MainWindow()
{
}
4.自定义槽函数
/*自定义槽(槽函数的使用就是普通函数的用法)
* 在qt5中,自定义槽可以是:任意的成员函数,普通全局函数,静态函数
* 槽函数需要和信号一致(参数、返回值)
* 由于信号都是没有返回值,所以,槽函数一定没有返回值
*/
//released:抬起
connect(b2,&QPushButton::released,this,&MainWindow::myslot);
//接收信号者改成b1,当抬起(released)时,b1隐藏hide
connect(b2,&QPushButton::released,&b1,&QPushButton::hide);
完整代码:mainwindow.cpp
#include "mainwindow.h"
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
b1.setParent(this); //指定父对象
b1.setText("close"); //给按钮设置内容
b1.move(100,100); //移动坐标
b2=new QPushButton(this); //为指针动态分配内存
b2->setText("abc");
//将b1的地址,即显示为close的按键,当采用pressed的方式,即按下时,功能设置为MainWindow类下面的close函数,即关闭
/* &b1:信号发出者,指针类型
* &QPushButton::pressed:处理的信号 &发送者的类名::信号名字
* this:信号接收者
* &MainWindow::close 槽函数,信号处理函数 &接收者的类名::槽函数名字
*/
connect(&b1,&QPushButton::pressed,this,&MainWindow::close);
/*自定义槽(槽函数的使用就是普通函数的用法)
* 在qt5中,自定义槽可以是:任意的成员函数,普通全局函数,静态函数
* 槽函数需要和信号一致(参数、返回值)
* 由于信号都是没有返回值,所以,槽函数一定没有返回值
*/
//released:抬起
connect(b2,&QPushButton::released,this,&MainWindow::myslot);
//接收信号者改成b1,当抬起(released)时,b1隐藏hide
connect(b2,&QPushButton::released,&b1,&QPushButton::hide);
}
//自定义的槽函数以成员函数实现
void MainWindow::myslot()
{
b2->setText("123"); //自定义的槽函数:用于改变打印值
}
MainWindow::~MainWindow()
{
}
注:当自定义槽函数为成员函数时,记得在mainwindow.h中进行声明,在mainwindow.cpp中进行实现
void myslot(); //与released对应,是一个无参数,无返回值的函数