控件GUI属性_胡代洲_gui如何调取控件属性
label(标签)
QObject
objName | 控件实例对象的变量名,可以修改为对应功能名,便于记忆 |
QWidget
windowModality | 窗口的模式 |
enabled | 控制是否使能,失能后控件显示为灰色,不能操作。 |
geometry (x、y、宽度、高度) | 控件原点坐标,宽度,高度 |
sizePolicy(大小策略)
Fixed | 控件不能被拉大或缩小 |
minimum | 自适应时控件的最小尺寸 |
maxnum | 自适应时控件的最大尺寸 |
preferred | 控件的sizeHint是他的sizeHint,但是可以放大或缩小 |
minmumExpanding | 控件可以自行增大或缩小,但是不能小于一个最小值 |
expanding | 控件可以自动伸缩,具有优先扩展权 |
ignored | 控件自由伸缩,无限制 |
minimumSize和maximumSize
sizeHint | 有布局时为true,无布局时为false |
sizehint | 为建议大小,minimumsize为最小,maximumsize为最大 |
basesize | 步进大小 |
palette(调色板) | 用来管理控件的背景色或外观色 |
font | 设置控件的字体、大小、颜色等 |
cursor | 光标风格选择,当为某个控件设置特有光标,那么当光标移动到控件区域时就会变化 |
mouseTracking | 鼠标跟踪,如果为disable鼠标移动不响应,只有鼠标按键时才响应 |
focuspolicy(焦点规则)
????????焦点控制就是对控件的选择,鼠标单击可以选择某个控件,table键也可以选择某个控件这些都可以设置。
TabFocus | 接收table键选择 |
clickFocus | 接收鼠标单击选择 |
strongfocus | 接收table和鼠标单击选择 |
wheelfocus | 接收鼠标滑轮选择 |
Nofocus | 不接受选择 |
contexMenuPolicy(右键菜单)
????????设置控件单击鼠标右键时是否弹出菜单栏,可以没有也可以按预设绑定的函数返回结果来呈现,或者发出信号由用户自己提供函数来实现。
acceptdrops(鼠标拖放) | 表示当前控件接受鼠标拖放事件,拖放是系统本身具备的功能,在这里只是利用。 |
tooltip | 当鼠标移动到控件上后,漂浮显示提示文字。 |
tooltipDuration | 漂浮显示文字时长,单位ms,当设置为-1时,根据提示文字数量来计算时间。 |
statustip | 浮显示信息转移到状态栏显示。如果没有状态栏就不显示。 |
whatsThis | 部件帮助信息,光标放在控件上,shift+F1弹出提示。 |
LayoutDirection | 布局方向,从左到右,从右到左,auto则跟随父控件或QAppliction的设置。该设置需要配合布局控件使用,同时控件坐标设置为非绝对值。 |
autoFillBackground | 部件背景色是否自动填充,如果enalble,则调用Paint事件设置的填充背景,使用的颜色由调色板Qpalette.window决定,如果控件父级对象背景具有静态渐变,则无法关闭此属性。 |
stylensheet | 样式自定义,需要做出不一样的控件,就在于在该项中去添加 |
locale | 国际化软件开发使用,可以看做是一个环境变量,影响控件的一系列信息,如日期格式、货币符号、语言文字、编码等。需要国际化的设计都会随locale改变自己 |
inputMethodhints | 控件用做输入时的约束设计,实际上输入法不一定支持。例如输入密码的规则 |
QFrame | 是控件的一个父类,主要是用来实现边框效果frameshape设置边框样式,frameshadow设置阴影效果。linewidth和midlinewidth设置有边框和阴影的相关尺寸以辅助显示效果 |
QLable
text | label上显示的文字 |
textFormat | 纯文本或富文本 |
pixmap | 使用位图填充 |
scaledContents | 图片显示大小自适应 |
alignment | 自动对齐规则 |
wordWrap | 文本折行显示 |
margin | 文本与边框距离 |
indent | 文字缩进 |
openExternalLinks | 使能文字外部链接 |
pushbutton(按键)
QAbstractButton
text | 图标上显示的字符 |
icon | 在button上添加图标,可展开添加多种状态iconsize就是图标大小 |
shortcut | 按键对应的快捷键 |
chekable | 选中后按钮带锁 |
autoRepeat | 当按钮按下且鼠标未释放时,重复发出pressed、released和clicked信号,长按多久开始自动发送由autoRepeatDelay设定、重复发送时间由autoRepeatInterva来设置,单位为mS |
autoExclusive | 选中时同一父类按键组成琴键开关,具有排他性 |
autodefault | 被选中后ui被运行时默认被选中(鼠标放在按键上,未单击状态),此时按回车可以改变按键状态。 flat? 按钮边框隐藏,被按下时才出现 |
window窗口
windowTitle | 窗口标题,显示在窗口左上角 |
windowIocn | 窗口标题前的图标 |
windowOpacity | 半透明设置范围0-1,可以有小数 |
windowFilePath | 窗口文件路径,指定为某路径下的文件后窗口标题与文件名相同 |
windowmodality | 模态窗口,主窗口弹出了另外一个小窗口,此时无法操作主窗口 |
iconsize | 标题上的图标大小 |
toolButtonStyle | 设置按钮显示风格(有图片无文字、有文字无图片) |
animated | 设置控件内的元素拖动调整位置时,显示效果为动画,无则直接过去 |
tableshape | 用来设置窗口打开多个容器时,容器的标题栏显示风格 |
信号与槽
????????信号signal,本质就是GUI系统中一个“事件”,例如按下Button,单击鼠标,串口接收到数据等,都是信号。
????????槽slot,本质是一个函数,类似于中断函数,这个中断由signal来激活。信号与槽是QT发明的一种抽象机制,给程序员提供一种语法,来定义一种事件同时为该事件绑定响应的函数。
????????我们可以通过在GUI设置信号与槽来实现按下pushButton时清除label功能,通过界面实现很简单,其实背后还是代码的支持,GUI自动生成的代码如下
QObject::connect(pushButton, SIGNAL(clicked()), label, SLOT(clear()));
????????信号与槽可以一对一也可以一对多,或者多对一,信号与槽其实是对OS消息机制的一种二次封装,pushButton发出clicked信号,经过内部管道传导分发给label,回调clear函数,这是典型的一个函数回调机制。
????????使用qt重要的是知道内部有些什么功能,在应对各种需求时,知道该使用什么功能来实现。
代码与GUI混编
????????代码与GUI混编是QT编程中最常用的方法,ui的XML文件经uic工具转换成.h文件后,会为每一个控件创建一个指针,且该指针变量权限是public,我们可以在其他文件中通过对象去访问到这个指针,此时我们对该对象的操作就是在操作UI的控件。
QT的元对象系统
元对象Q_OBJECT,它是一个宏,简单说就是一个包含在Qobject对象中的一个成员,主要用来实现信号与槽。只有当槽注册到Q_OBJECT后,signal才会去调用他。而这一切都是moc工具在背后操作。
Qstring
????????Qstring是QT中的“字符串”,在QT中仍然支持c和c++中的字符串语法,QString与C++的string很相似,背后都会被转换成Qstring,为了提高效率,所以我们推荐直接使用Qstring。常用语法如下:
QString s1="abc" | 定义并初始化 |
s1.append("def") | 末尾追加字符 |
s1=s1+”ghi” | 末尾追加字符当然可以写成s1 +=”ghi |
c1=s1.at(2).unicode() | 将s1中的第3个字符取出并转换成标准字符后给c1 |
s1.chop(2) | 砍掉末尾2个字符 |
s1.clear() | 清空所以字符 |
QString ::compare("hu","hu") | 比较两字符串,相等返回0,否则非0 |
s1.insert(2,"haha"); | 在第3个位置插入字符串 |
s1.isEmpty() | 判断s1是否为空 |
s1.length() | 获取s1的长度 |
s2=s1.mid(0,3) | 从s1第0个字符开始截取3个字符给S2,s1不变 |
s1.remove(0,2) | 从s1的第0个字符开始删除2个字符 |
s1.setNum(1234,10) | 将数字1234的十进制转换为字符串给s1 |
s1.sprintf("num= %d",10) | s1的内容为“num=10” |
int value=s1.toInt() | s1初值 “123”将s1的内容转换成int类型的数字 |
QT容器类
再论STL容器
????????容器本质是数据管理的类,包含数据管理容器和算法容器库,数据管理提供内存的获取、管理、释放和数据存放方法及索引,算法则是对容器存储的数据进行处理。数据管理容器必须提供迭代器,容器分为序列容器和关系容器,QT对c++的容器进行了延伸,主要添加了关于GUI方面的一些管理特性,形成了QT的容器。
QT序列容器
QList:内部数组实现,用index索引,由于是数组,所以首尾添加元素快,常规使用最频繁,通常没有特殊要求,都使用该容器。
QLinkedList:使用链表实现,用迭代器索引,优点是中间插入数据效率高。
QVector:内部各项在内存中连续存储,中间或开头插入数据非常慢。
QStack:栈,LIFO,基于Qvector实现,多了push()、pos()、top()方法。
QQueue:队列,FIFO,在QList中增加了enqeue()、dequeue()、head().
QT关系容器
QMap:key? value对的存储,以key的顺序来存放。
QMutiMap:qmap的扩展,可以一个一个key对应多个value。
QHash:key value对的存储,key不按顺序而是用哈希规则计算,速度更快。若不要求顺序时优先使用QHash。
QMultiHash:QHash的扩展,可以一个key对多个value。
Qset:单Value存储,支持快速查找。
QT容器的遍历
QT容器支持java风格的迭代器,使用非常简单,适合java的程序员,他指向元素的边界而不是元素的本身。
同样也支持STL风格的迭代器,适合习惯使用c++编程的人。除了这些还有foreach,该关键字在c++中已经有,实际用法也和c++中非常类似,只是语法符号略有些不同。
虽然遍历可以使用begin和end,仍然还是可以使用简化的for语句,如下
for(auto c: s1)
{
cout << c <<endl;
}
容器使用示例
?? QList<QString>? s1;????? //定义一个list容器
?? s1<<"hu"<<"dai"<<"zhou"; //插入内容
? qDebug() << s1.size();??? //访问大小
? qDebug() << s1[0];??????? //访问第0个元素
? for(auto i:s1)??????????? //遍历
? {
??? qDebug()<<i;
? }
?? QMap<QString,int>?? s2={{"aa",2},{"bb",3},{"cc",4}? };//定义并初始化
?? for(auto x: s2)????????? //遍历
?? {
?? qDebug()<<x;
?? }
?? qDebug()<<s2["bb"];????? //以key访问value
主体模块与附加模块
QT的功能分了很多模块,我们编程时需要啥模块就去添加啥模块,其模块主要分为
基本模块(QT Essentials),主体核心模块。
附加模块(QT Addons),主体附加模块。
增值模块(value AddModules),单独发布提供特定功能的模块。
技术预览模块(Technology preview modules),开发阶段的模块,试验模块。
QT学习建议
????????QT的一大特点就是内容非常多,几乎涵盖了所有关于GUI方面的东西,因为内容太多,给学习带来了困难,所以在学习QT的时候需要注意不要图全,重在学习主体、学原理、夯实编程功底是关键。
????????学习控件主要是学习控件开发的基础,如拖拽、UI与代码的对应关系、信号与槽等,得知道控件最常用的用法和背后常用的属性方法,不要试图去记住所有,但要有大概印象,知道可以在哪里查
相关文章
- 银河麒麟服务器操作系统V10-SP2安装kafka_月亮打烊了+_麒麟系统安装kafka
- 八、JavaScript??标识符_火木火木
- 基于Java+SQL的汽车销售管理系统_り澄忆秋、_sql关于车辆管理系统的信息
- mysql提取日期中的年月_yetaoseo
- 如何写好科研论文:Introduction(2)_冷冻工厂
- 技术分享| 消息队列Kafka群集部署_anyRTC
- 系统移植第五天_Pointerup
- Mysql数据库时间查询_summit_0.0_mysql 时间查询
- sql子查询详解_清风拂来水波不兴_sql子查询
- Java 下数据业务逻辑开发技术 JOOQ 和 SPL_哪 吒_java下
- 卷积神经网络入门_北极象
- uni-app使用echarts并解决echarts文件过大的问题_没糖de药房
- MYSQL 创建表时报错#1064 - You have an error in your SQL syntax; check the manual that corresponds to your_
- 如何快速优雅的用Know Streaming创建Topic_石臻臻的杂货铺_knowstreaming
- 一起误删cni0虚拟网卡引发的k8s事故_小二上酒8_k8s cni0
- Kafka必问面试题_ayu_programer