IT技术之家

首页 > 前端

前端

控件GUI属性_胡代洲_gui如何调取控件属性

发布时间:2023-11-28 20:56:42 前端 14次 标签:javascript 开发语言 ecmascript
label(标签)QObject objName 控件实例对象的变量名,可以修改为对应功能名,便于记忆 QWidget windowModality 窗口的模式 enabled 控制是否使能,失能后控件显示为灰色,不能操作。 geometry (x、y、宽度、高度) 控件原点坐标,宽度,高度 sizePolicy(大小策略)...

label(标签)

QObject

objName

控件实例对象的变量名,可以修改为对应功能名,便于记忆

QWidget

windowModality

窗口的模式

enabled

控制是否使能,失能后控件显示为灰色,不能操作。

geometry

(xy、宽度、高度)

控件原点坐标,宽度,高度

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设置阴影效果。linewidthmidlinewidth设置有边框和阴影的相关尺寸以辅助显示效果

QLable

text

label上显示的文字

textFormat

纯文本或富文本

pixmap

使用位图填充

scaledContents

图片显示大小自适应

alignment

自动对齐规则

wordWrap

文本折行显示

margin

文本与边框距离

indent

文字缩进

openExternalLinks

使能文字外部链接

pushbutton(按键)

QAbstractButton

text

图标上显示的字符

icon

button上添加图标,可展开添加多种状态iconsize就是图标大小

shortcut

按键对应的快捷键

chekable

选中后按钮带锁

autoRepeat

当按钮按下且鼠标未释放时,重复发出pressedreleasedclicked信号,长按多久开始自动发送由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编程中最常用的方法,uiXML文件经uic工具转换成.h文件后,会为每一个控件创建一个指针,且该指针变量权限是public,我们可以在其他文件中通过对象去访问到这个指针,此时我们对该对象的操作就是在操作UI的控件。

QT的元对象系统

元对象Q_OBJECT,它是一个宏,简单说就是一个包含在Qobject对象中的一个成员,主要用来实现信号与槽。只有当槽注册到Q_OBJECT后,signal才会去调用他。而这一切都是moc工具在背后操作。

Qstring

????????Qstring是QT中的“字符串”,在QT中仍然支持cc++中的字符串语法,QStringC++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)

s10个字符开始截取3个字符给S2s1不变

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容器

????????容器本质是数据管理的类,包含数据管理容器和算法容器库,数据管理提供内存的获取、管理、释放和数据存放方法及索引,算法则是对容器存储的数据进行处理。数据管理容器必须提供迭代器,容器分为序列容器和关系容器,QTc++的容器进行了延伸,主要添加了关于GUI方面的一些管理特性,形成了QT的容器。

QT序列容器

QList:内部数组实现,用index索引,由于是数组,所以首尾添加元素快,常规使用最频繁,通常没有特殊要求,都使用该容器。

QLinkedList:使用链表实现,用迭代器索引,优点是中间插入数据效率高。

QVector:内部各项在内存中连续存储,中间或开头插入数据非常慢。

QStack:栈,LIFO,基于Qvector实现,多了push()pos()top()方法。

QQueue:队列,FIFO,在QList中增加了enqeue()dequeue()head().

QT关系容器

QMapkey? value对的存储,以key的顺序来存放。

QMutiMapqmap的扩展,可以一个一个key对应多个value

QHashkey value对的存储,key不按顺序而是用哈希规则计算,速度更快。若不要求顺序时优先使用QHash

QMultiHashQHash的扩展,可以一个key对多个value

Qset:单Value存储,支持快速查找。

QT容器的遍历

QT容器支持java风格的迭代器,使用非常简单,适合java的程序员,他指向元素的边界而不是元素的本身。

同样也支持STL风格的迭代器,适合习惯使用c++编程的人。除了这些还有foreach,该关键字在c++中已经有,实际用法也和c++中非常类似,只是语法符号略有些不同。

虽然遍历可以使用beginend,仍然还是可以使用简化的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与代码的对应关系、信号与槽等,得知道控件最常用的用法和背后常用的属性方法,不要试图去记住所有,但要有大概印象,知道可以在哪里查