QT学习2
一、常用控件与常用的功能函数。
QDialog、QMainWindow、QPushButton、QLabel、QLineEdit
构造函数指定父容器、setText,getText,size,resize,move,clicked。
构造函数指定父容器、setText,getText,size,resize,move,clicked。
二、Qt creator(集成开发环境)
1、创建新工程
打开Qt createor、创建项目、Qt控件项目、Qt Gui应用、选择主窗口的类型,设置类名、文件名、是否生成界面文件。
2、打开旧工程
a、版本一致,直接打开。
b、如果Qtcreator的版本不同,需要重新构建。
c、删除所有Qt自动生成的文件,使用qmake -project、qmake再次构建项目。
3、使用设计师制作界面
a、创建界面文件:
1、在创建工程时勾选界面文件
2、使用设计师新建
3、在工程中新建界面文件
b、设计师窗口布局
a、控件盒:包含了Qt中所有可以使用的控件及工具。
b、画布:所见即所得的显示,但要以最终的显示效果为主。
c、对象查看器:在此窗口可以设置控件对象的名字和类型。
d、属性编辑器:设置对象的各种属性。
e、对象和槽编辑器:为对象连接现有的信号和槽,无法生成新的槽函数。
c、界面布局调整
调整控件的位置:
up、down、left、right 每次十像素移动
Ctrl+up、down、left、right 每次一像素移动
调整控件的大小:
控件的x、y固定不变
Shift+up、down、left、right 每次改变10个像素
Ctrl+Shift+up、down、left、right 每次改变10个像素
d、tab键顺序
在部门场景下无法使用鼠标,因此tab位置至关重要。
第4个按键,进入tab键顺序调整。
注意:窗体、视图、选择要隐藏或显示的区域。
1、创建新工程
打开Qt createor、创建项目、Qt控件项目、Qt Gui应用、选择主窗口的类型,设置类名、文件名、是否生成界面文件。
2、打开旧工程
a、版本一致,直接打开。
b、如果Qtcreator的版本不同,需要重新构建。
c、删除所有Qt自动生成的文件,使用qmake -project、qmake再次构建项目。
3、使用设计师制作界面
a、创建界面文件:
1、在创建工程时勾选界面文件
2、使用设计师新建
3、在工程中新建界面文件
b、设计师窗口布局
a、控件盒:包含了Qt中所有可以使用的控件及工具。
b、画布:所见即所得的显示,但要以最终的显示效果为主。
c、对象查看器:在此窗口可以设置控件对象的名字和类型。
d、属性编辑器:设置对象的各种属性。
e、对象和槽编辑器:为对象连接现有的信号和槽,无法生成新的槽函数。
c、界面布局调整
调整控件的位置:
up、down、left、right 每次十像素移动
Ctrl+up、down、left、right 每次一像素移动
调整控件的大小:
控件的x、y固定不变
Shift+up、down、left、right 每次改变10个像素
Ctrl+Shift+up、down、left、right 每次改变10个像素
d、tab键顺序
在部门场景下无法使用鼠标,因此tab位置至关重要。
第4个按键,进入tab键顺序调整。
注意:窗体、视图、选择要隐藏或显示的区域。
4、信号和槽的连接
1、在代码中使用connect连接。
2、右击控制转到槽。
3、使用信号和槽编辑器连接。
4、第二个按键,控制与控件之间有信号和槽的连接。
1、在代码中使用connect连接。
2、右击控制转到槽。
3、使用信号和槽编辑器连接。
4、第二个按键,控制与控件之间有信号和槽的连接。
5、在代码中使用控件对象
1、ui->对象。
2、使用设计单独设计一份ui文件
把ui文件转成.h文件再使用,uic file.ui -o file.h
1、ui->对象。
2、使用设计单独设计一份ui文件
把ui文件转成.h文件再使用,uic file.ui -o file.h
三、自动布局
当程序运行时窗口的大小随时可能会变化,如果固定控件的位置和大小,那么会造成布局混乱。
1、固定窗口的大小。
2、使用"弹簧"使用控件居中,但要配合布局器使用(水平、垂直、栅栏)。
当程序运行时窗口的大小随时可能会变化,如果固定控件的位置和大小,那么会造成布局混乱。
1、固定窗口的大小。
2、使用"弹簧"使用控件居中,但要配合布局器使用(水平、垂直、栅栏)。
四、显示风格设置
1、在代码中设置显示风格。
1、在代码中设置显示风格。
pushButton->setStyleSheet("background-color: rgb(255, 0, 0);}"); this->setStyleSheet("QPushButton{background-color: rgb(255, 0, 0);}" "QPushButton:hover{background-color: rgb(0, 0, 0);}" "QPushButton:pressed{background-color: rgb(0, 0, 255);}");
2、在设计师中改变样式表
选择中控件、右击修改样式表
3、样式表的语法是CSS,是一种制作网页常用的语法。
搜索关键字:Qt 样式表,Qt css
选择中控件、右击修改样式表
3、样式表的语法是CSS,是一种制作网页常用的语法。
搜索关键字:Qt 样式表,Qt css
五、资源和图片
1、创建目录,尽量单独存储图片
2、添加资源文件、添加前缀、选中添加文件。
3、在样式表中选择要使用的文件。
1、创建目录,尽量单独存储图片
2、添加资源文件、添加前缀、选中添加文件。
3、在样式表中选择要使用的文件。
练习:实现图片浏览器。
六、Qt中的延时
Qt没有跨平台的睡眠函函数。
1、多线程。
2、自定义休眠函数。
3、让sleep后台运行 QCoreApplication::processEvents();
Qt没有跨平台的睡眠函函数。
1、多线程。
2、自定义休眠函数。
3、让sleep后台运行 QCoreApplication::processEvents();
七、定义时器
Qtimer 类 start(int msec) 启动定义器 void timeout(void) 信号 qDebug 类似printf函数的调试函数
一、事件与处理
程序在运算过程中发生的一些事情:鼠标单击、键盘的按下...
这些的事件的监控与处理在Qt中不是以信号的方式处理的。
当这些事件发生时会调用QObject类中的功能函数(虚函数),所有的控件类都继承了这个类。
程序在运算过程中发生的一些事情:鼠标单击、键盘的按下...
这些的事件的监控与处理在Qt中不是以信号的方式处理的。
当这些事件发生时会调用QObject类中的功能函数(虚函数),所有的控件类都继承了这个类。
常用的鼠标事件: void mousePressEvent(QMouseEvent *); 按下 void mouseReleaseEvent(QMouseEvent *); 弹起 void mouseMoveEvent(QMouseEvent *); 按下时并移动 void mouseDoubleClickEvent(QMouseEvent *); 双击(会触发按下和弹起); 通过QMouseEvent 可以判断出是个按键: event->button() == Qt::LeftButton event->button() == Qt::RightButton event->button() == Qt::MidButton 常用的键盘事件: void keyPressEvent(QKeyEvent *); 按下 void keyReleaseEvent(QKeyEvent *); 弹起 通过QKeyEvent 可以判断出按键的键值: event->key == Qt::Key_Up; 常用的窗口事件: void closeEvent(QCloseEvent *); 窗口关闭 void paintEvent(QPaintEvent *); 窗口显示 void moveEvent(QMoveEvent *); 窗口移动
练习:使用键盘事件和定时器,实现一个在窗口上移动的老鼠。
二、线程与多线程
1、在Qt中什么情况下需要多线程?
在单线程时,如果在耗时较长的操作,那么主界面会被阻塞。
会产生卡死的现象。
1、在Qt中什么情况下需要多线程?
在单线程时,如果在耗时较长的操作,那么主界面会被阻塞。
会产生卡死的现象。
2、Qthread类
a、必须要继承
b、必须要重写run函数
a、必须要继承
b、必须要重写run函数
3、等待线程
QThread::wait(time);
功能:等待线程结束并回收,与pthread_join一样。
time:设置要等待的秒数,如果时间到了线程还没有结束则等待失败,默认值是ULONG_MAX(一直等下去)。
4、终止线程
QThread::terminate(),让线程结束执行。
terminated(),线程结束信号。
QThread::wait(time);
功能:等待线程结束并回收,与pthread_join一样。
time:设置要等待的秒数,如果时间到了线程还没有结束则等待失败,默认值是ULONG_MAX(一直等下去)。
4、终止线程
QThread::terminate(),让线程结束执行。
terminated(),线程结束信号。
练习:如何用信号槽,在子线程里发送信号给主线程,让主线程显示图片(修改GUI主界面)。
1、在创建类时立即添加 Q_OBJECT
2、如果编译后末添加,把所有Qt自动生成的文件删除
3、使用qmake -project、qmake、make
1、在创建类时立即添加 Q_OBJECT
2、如果编译后末添加,把所有Qt自动生成的文件删除
3、使用qmake -project、qmake、make
三、线程同步
QMutex 互斥量
QReadWriteLock 读写锁
QMutex 互斥量
QReadWriteLock 读写锁
QSemaphore 信号量
QWaitCondition 条件变量
QWaitCondition 条件变量
功能与Linux系统中的一样,但这4项是跨平台使用的。
博客是我在大海中捞到针的神器