91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt中的屬性設置(搜集整理)

發布時間:2020-06-30 15:24:25 來源:網絡 閱讀:4162 作者:WZM3558862 欄目:開發技術

一、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

1
2
3
4
#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值改變按鈕的顏色。

在代碼中,首先定義屬性

1
Q_PROPERTY(QString borderColor READ getBorderColor WRITE setBorderColor)

使用一個成員變量保存屬性的值,并通過set和get函數分別設置和獲得該值。

1
2
3
4
5
private:
    QString m_strBorderColor;
private:
    void setBorderColor(const QString &strBorderColor){ m_strBorderColor = strBorderColor; }
    QString getBorderColor(){ return m_strBorderColor; }

單擊按鈕pushButton改變屬性值,從而改變按鈕pushButton_3的樣式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void 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的透明度。

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

定義屬性時,在函數setBtnOpacity中改變QGraphicsOpacityEffect對象,來調整透明度。

好了,現在我們將動畫屬性名稱設置為buttonOpacity,就能改變按鈕的透明度了


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兖州市| 于田县| 江城| 江陵县| 昭觉县| 石狮市| 宣化县| 北海市| 永清县| 长沙县| 玉龙| 荣成市| 石狮市| 博湖县| 余姚市| 搜索| 池州市| 合作市| 安平县| 桂林市| 盐源县| 图木舒克市| 仪征市| 东至县| 钟祥市| 新蔡县| 温州市| 双城市| 南投市| 阿瓦提县| 思南县| 揭阳市| 竹山县| 鸡西市| 中西区| 成都市| 漳州市| 精河县| 信丰县| 宽甸| 溧阳市|