赞
踩
最近的项目工作需要使用到QT相关的知识内容。本人是QT小白,第一次接触QT,正在努力学习中…更新CSDN文章主要为记录自己的学习进度~
Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
Q_OBJECT :宏,引入qt信号和槽的一个宏
示例:
MyWidget(QWidget *parent = 0);
其中,参数parent是一个窗口指针,代表父窗口对象的指针(用于指定类之间的父子关系),以按钮为例,若想要按钮显示在某窗口上,就要跟该窗口建立起父子关系。
如果parent为0或者NULL,则表示当前窗口对象是个顶层窗口(是在任务栏可以找到的窗口)。
顶层窗口以屏幕的左上角为(0,0)
其他窗口以其父窗口的左上角为(0,0)
坐标轴的正方向为:x轴水平向右,y轴竖直向下
相关的API函数有:
move(x,y)//移动窗口到父窗口(x,y)坐标
resize(w,h)//重新设置窗口的大小width=w,height=h
setFixedSize(w,h)//设置窗口的固定大小width=w,height=h
setWindowTitle(title)//设置窗口标题
setGeometry(x,y,w,h)//同时设置窗口位置和大小,相当于move和resize的结合体
示例:
QApplication a(argc, argv);
创建一个QApplication对象,作用是维护qt应用程序生命,每个qt程序有且仅有一个QApplication对象,它也处理应用程序的初始化和结束,并且提供对话管理。
a.exec();
这是一个死循环,在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。是qt程序的生命循环、消息循环。
示例:
QPushButton * btn = new QPushButton;
创建一个QPushButton对象,依赖于qt的内存管理机制(父对象释放的时候会自动释放各个子对象),可以不进行free/delete操作释放内存。
指定QPushButton对象的父窗口,可以使用setParent()函数或者直接构造函数传参。
基本关系:信号发送者、信号、信号接收者、槽(即信号的处理动作)
注:信号本质是事件,表现形式是函数;槽的本质是对信号的一个处理函数。
利用帮助文档,在QAbstractButton 中就可以找到关键字signals,点击signals索引到系统自带的信号有如下几个:
clicked:鼠标点击按钮一次,信号就会被触发
pressed:鼠标的左键 | 右键按下,信号就会被触发
released:按钮被释放,信号就会被触发
toggled:在Button状态(开、关)切换时会被触发
示例:
conncet(sender,&SenderCLass::signal,receiver,&ReceiverClass::slot);//qt5的用法
connect(sender, SIGNAL(signal), receiver, SLOT(slot));//qt4的用法
使用qt4的用法对于信号和槽的函数重载容易区分,qt5的用法更有利于程序错误排查。
自定义信号
自定义槽
注:使用connect之前要先创建SenderCLass和ReceiverClass的对象以作为信号的发送者和接受者。
若存在函数重载,需要解决参数二义性问题:
一个信号可以连接多个槽
一个信号建立了多个connect
那么当信号发射的时候,槽函数的调用顺序是随机的
一个槽可以连接多个信号
信号可以连接信号
connect(第一个信号发送者,第一个信号,第二个信号发送者,也作为第一个信号的接收者,第二个信号)
信号可以断开连接,使用disconnect函数
disconnect参数使用方法与connect相同
信号和槽的参数关系,必须同时满足以下两点
信号和槽函数的参数类型必须对应
信号和槽函数的参数个数可以不一致,但是信号函数参数个数必须大于等于槽函数参数个数
标准格式:
[capture](parameters) opt ->retType
{
……;
}
注:值传递的方式捕获的变量默认是const ,若在函数体中需要对该变量进行修改的话要使用 mutable选项
第一篇qt学习笔记结束,撒花~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。