2010-06-16 77 views
2

我已經成功地我QLineEdit的風格是這樣的:重置Qt樣式表

alt text http://www.kimag.es/share/54278758.png

void Utilities::setFormErrorStyle(QLineEdit *lineEdit) 
{ 
    lineEdit->setStyleSheet(
      "background-color: #FF8A8A;" 
      "background-image: url(:/resources/warning.png);" 
      "background-position: right center;" 
      "background-repeat: no-repeat;" 
      ""); 
} 

我叫使用

Utilities *util = new Utilities; 
util->setFormErrorStyle(lineNoStaf); 

流程應該是這樣的功能這個:

  1. 用戶開放的形式
  2. 用戶填寫數據
  3. 用戶提交的數據
  4. 遇到錯誤
  5. 使用setFormErrorStyle()
  6. 用戶編輯在QLineEdit的和樣式的文本消失

此功能應該一遍又一遍地重複使用,但我怎樣才能連接QLineEdit信號,如textChanged()到其他類中的功能將重置樣式表,然後斷開信號,以便每次文本更改時都不會持續運行?

回答

3

還好吧,這不是編譯,但原則上應工作,你應該能夠通過調用editWidget->setProperty('isError',true)editWidget->setError(false)

來改變它的外表
class ErrorTextEdit : QLineEdit 
{ 
    Q_OBJECT 
    QPROPERTY(bool isError, READ isError, WRITE setError); 

public: 
    ErrorTextEdit(QWidget* parent) : QLineEdit(parent), m_isError(false) 
    { 
    m_styleSheet = "" // see below 
    setStyleSheet(m_styleSheet); 
    } 

    void setError(bool val) 
    { 
    if (val != m_isError) 
    { 
     m_isError = val; 
     setStyleSheet(m_styleSheet); 
    } 
    } 

    bool isError() {return m_isError;} 

private: 
    QString m_styleSheet; 
    bool m_isError; 
} 

的樣式表

ErrorTextEdit[isError="false"] 
{ 
    optional ... 
    Style for textedit that is NOT an error 
} 

ErrorTextEdit[isError="true"] 
{ 
    background-color: #FF8A8A; 
    background-image: url(:/resources/warning.png); 
    background-position: right center; 
    background-repeat: no-repeat; 
} 

術語

[<property>="<value>"] 

限制樣式表的應用,其<property>具有相應<value>唯一需要注意的就是風格是當地產改變其價值改變的類的實例,所以樣式表必須是請重新應用該窗口小部件的外觀以實際更改,請參見Stylesheet Documentation -> Property Selector

此構造將樣式表移至使用它的窗口小部件中,並將開關置於窗口小部件內部,窗口小部件將根據其狀態進行更改。

一般來說,你有一對夫婦的方式在你的形式來處理無效輸入

一)觀察每一個變化,並適當地更新款式,你應該能夠使用QValidator爲過,但是這是一個獨立的主題,使用QValidator,您可能完全內部化一個QTextEdit的狀態,而不必處理來自外部的有效性。

b)在提交循環中執行上述操作,每當用戶點擊提交更改正確和錯誤字段的狀態

這一切都取決於你的應用程序的結構和視圖

0

看到,另一個想法是你需要重寫線編輯的畫筆,然後設置背景圖像和顏色。

這裏的執行力度是presetn here按鈕,跟進同你行編輯

+0

我在自定義'QLineEdit'時沒有任何問題,但是我有問題使用另一個類中的另一個函數重新設置它。 – amree 2010-06-16 13:15:27

+0

你能寫一個快速樣本類併發布代碼嗎? 你寫這兩門課,並告訴你在哪個場景中你面臨的問題,這將是很容易跟蹤和找到解決方案。 我沒有得到,你想要多少。 – Naruto 2010-06-16 13:51:49

5

Qt還允許在其樣式表中使用動態屬性,這意味着您不需要爲表單中的每個窗口小部件類型編寫自己的類。

http://qt-project.org/doc/qt-4.8/stylesheet-examples.html

自定義使用動態屬性

有我們需要提出的是具有強制性的字段的表格很多情況下。爲了向用戶表明該字段是強制性的,一個有效的(儘管美觀可疑)解決方案是使用黃色作爲這些字段的背景顏色。事實證明,使用Qt樣式表很容易實現。首先,我們可以使用下面的應用程序範圍內的樣式表:

*[mandatoryField="true"] { background-color: yellow } 

這意味着,每一個部件,其mandatoryField Qt的屬性設置爲true,將有一個黃色的背景。 然後,對於每個必填字段小部件,我們將簡單地創建一個mandatoryField屬性並將其設置爲true。例如:

QLineEdit *nameEdit = new QLineEdit(this); 
nameEdit->setProperty("mandatoryField", true); 

QLineEdit *emailEdit = new QLineEdit(this); 
emailEdit->setProperty("mandatoryField", true); 

QSpinBox *ageSpinBox = new QSpinBox(this); 
ageSpinBox->setProperty("mandatoryField", true); 

也可用於Qt 4.3!