Qt中的属性设置(搜集整理)
admin
2023-08-03 04:20:07
0

一、Qt中的属性

属性是指窗口或控件的属性,比如opacity属性表示“透明度”,geometry指的是“位置和大小”,pos属性代表“位置”。qt中的控件有自带的属性,我们也可以自己定义属性。

QObject这个类有一个函数setProperty,我们可以通过这个函数定义自己的属性,使用方法很简单,setProperty(const char * name, const QVariant & value),第一个参数是属性的名称,第二个参数是属性值。

除了上面的方法,还有一种自定义属性的方法,就是使用Q_PROPERTY这个宏,简单用法如下:

Q_PROPERTY(type name READ getFunction WRITE setFunction)

Q_PROPERTY(参数类型 参数名称 READ 获得属性值函数 WRITE 设置属性值函数)

比如Q_PROPERTY(bool bIsDoubi READ getDoubi WRITE setDoubi),属性类型是bool类型,bIsDoubi是属性名称。除此之外还需要写两个函数,第一个是设置属性的函数void setDoui(bool),第二个是获得属性的函数bool getDoubi()。

二、自定义属性有什么用

我目前所知的自定义属性有两个用途,第一是用于改变样式,第二是用于动画,下面分别作解释。

三、改变样式

翻开Qt助手,找到样式表语法部分,在通过选择器设置样式中有一个属性选择器,比如QPushButton[flat="false"]意思就是当按钮属性flat为false时的样式。

举个栗子,我们有个类,名字叫PropertyTest,在界面中有个按钮,名字叫pushButton_3

1234#pushButton_3{border:4px solid blue;}PropertyTest[borderColor="red"] #pushButton_3{border:4px solid red;}PropertyTest[borderColor="green"] #pushButton_3{border:4px solid green;}PropertyTest[borderColor="blue"] #pushButton_3{border:4px solid blue;}

上面的样式意思是,按钮默认样式是blue蓝色,通过改变类PropertyTest的属性borderColor值改变按钮的颜色。

在代码中,首先定义属性

1Q_PROPERTY(QString borderColor READ getBorderColor WRITE setBorderColor)

使用一个成员变量保存属性的值,并通过set和get函数分别设置和获得该值。

12345private:    QString m_strBorderColor;private:    void setBorderColor(const QString &strBorderColor){ m_strBorderColor = strBorderColor; }    QString getBorderColor(){ return m_strBorderColor; }

单击按钮pushButton改变属性值,从而改变按钮pushButton_3的样式。

12345678910111213141516171819void PropertyTest::changeBorderColor(){    if (m_iTest % 3 == 0)    {        setBorderColor("red");    }    else if (m_iTest % 3 == 1)    {        setBorderColor("green");    }    else    {        setBorderColor("blue");    }    style()->unpolish(ui.pushButton_3);    style()->polish(ui.pushButton_3);    update();    m_iTest++;}

最后要注意的是,上面代码中的unpolish和polish部分。

在助手中有个提醒,如果使用属性选择器的时候,之前已经有样式,那么有必要重新设置一下,就是先去掉之前的样式,再添加新的样式。也就是通过上面unpolish和polish两个函数实现。

四、动画中使用自定义属性

如果我们想要用一个动画改变按钮的透明度,因为按钮QPushButton是继承自QWidget的,在QWidget中有个函数setWindowOpacity,所以你会将动画的属性名称设置为windowOpacity。然而,最后透明度是不会有任何改变的,因为只有在setWindowFlags时设置为Qt::Window,windowOpacity这个属性才能生效。

因此,有必要寻求其它方法,在QWidget中有一个函数setGraphicsEffect(QGraphicsEffect *),其中QGraphicsEffect有一个派生类QGraphicsOpacityEffect,可以通过它来设置QWidget的透明度。

123m_pOpacityEffect = new QGraphicsOpacityEffect(this);m_pOpacityEffect->setOpacity(1);this->setGraphicsEffect(m_pOpacityEffect);
1Q_PROPERTY(qreal buttonOpacity READ buttonOpacity WRITE setBtnOpacity)

定义属性时,在函数setBtnOpacity中改变QGraphicsOpacityEffect对象,来调整透明度。

好了,现在我们将动画属性名称设置为buttonOpacity,就能改变按钮的透明度了


相关内容

热门资讯

杭州两大火车站7月12日全部列... 2026年7月11日深夜,杭州西站管委会发布通知,受台风“巴威”影响,为确保铁路运输安全和旅客出行安...
美官员:美国团队未前往阿曼参加... △美国白宫(资料图)央视记者当地时间7月11日获悉,一名美国官员表示,美国谈判人员并未前往阿曼参加与...
上海奉贤警方:男子发布涉台风不... 上海市公安局奉贤分局:经警方调查,2026年7月9日,沙某(男,49岁)为博取关注,将其3年前拍摄的...
资讯有故事|陈立泉:铸就中国锂... 中国工程院院士、中国科学院物理研究所研究员陈立泉近日获国家最高科学技术奖。 半个世纪前,远在德国的他...
广合科技获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示广合科技(001389)新获得一项实用新型专利授权,专利名为“...
海信墨水屏手机A10预热:背面... IT之家 7 月 11 日消息,海信墨水屏官方今日公布了墨水屏手机 A10 的外观和部分参数。 这款...
受“巴威”影响,上海两机场计划... 记者从上海机场了解到,受今年第9号台风“巴威”影响,12日上海浦东机场和虹桥机场通行能力将出现下降,...
电科蓝天获得发明专利授权:“一... 证券之星消息,根据天眼查APP数据显示电科蓝天(688818)新获得一项发明专利授权,专利名为“一种...
最具性价比天玑9500旗舰手机... 早年前大家很抵触联发科的芯片,甚至调侃“一核有难,八核围观”,但现在不同了,联发科芯片的实力大增,市...
复盘六蓝水库险情:面对极端暴雨... 这次广西的灾情当中,最让人揪心的,是横州市六蓝水库的漫坝和溃口。这座水坝,是一座典型的均质土坝,六十...