2010-06-16 2 views
2

Я сумел стилизовать свою QLineEdit к чему-то вроде этого:Переустановка Qt Style Sheet

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. Got ошибку
  5. Используйте setFormErrorStyle()
  6. редактировать пользователя текст в QLineEdit и стиль исчезают

Эта функция следует повторно использовать снова и снова, но как я могу подключить сигнал QLineEdit, такой как textChanged(), чтобы функция в другом классе, которая сбросит таблицу стилей, а затем отключит сигнал, чтобы он не работал непрерывно каждый раз, когда текст изменился?

ответ

3

AllRight, это не компилируется, но должны работать в принципе, вы должны быть в состоянии изменить внешний вид, вызвав 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> единственный нюанс в том, что стиль не изменилось, когда свойство изменяет свое значение, поэтому таблица стилей должна быть reapplied для внешнего вида виджета, см. Stylesheet Documentation -> Property Selector

Эта конструкция перемещает таблицу стилей в виджет, который ее использует, и делает переключатель внутренним для виджета, виджет изменяется в соответствии с его состоянием.

В целом у вас есть несколько способов справиться с недействительными входами в форме

а) наблюдать все изменения и обновить стиль надлежащим образом, вы должны быть в состоянии использовать QValidator для этого тоже, но это отдельное темы, используя QValidator, вы, вероятно, сможете полностью интернализировать состояние одного QTextEdit и не иметь дело со своей действительностью со стороны

b) Сделайте это в цикле отправки, который вы описали выше, всякий раз, когда пользователь клики по отправке изменяют состояние правильных и неправильных полей

все зависит от структуры вашего приложения и вида

0

См., Другая идея - вам нужно переопределить рисование линии, а затем установить фоновое изображение и цвет.

здесь implimentation является presetn here кнопку, следить за тем же к вашей линии редактирования

+0

У меня нет проблем с настройкой 'QLineEdit', но у меня возникла проблема с возвратом его обратно с использованием другой функции в разных классах. – amree

+0

вы можете написать быстрый образец класса и опубликовать код. вы пишете два класса и расскажите, в каком сценарии вы столкнулись с проблемой, будет легко отслеживать и находить решение. Я не получаю, как именно вы хотите. – Naruto

5

Qt также позволяет динамические свойства в своей таблице стилей, это означает, что вам не нужно вводить код собственного класса для каждого типа виджетов в вашей форме.

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

Настройки с использованием динамических свойств

Есть много ситуаций, в которых мы должны представить форму, которая имеет обязательное для заполнения поля. Чтобы указать пользователю, что поле является обязательным, одним эффективным (хотя и эстетически сомнительным) решением является использование желтого цвета в качестве фона для этих полей. Оказывается, это очень легко реализовать с использованием таблиц стилей Qt. Во-первых, мы будем использовать следующее приложение для всей таблицы стилей:

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

Это означает, что каждый виджет, свойство mandatoryField Qt устанавливается истина будет иметь желтый фон. Затем для каждого обязательного виджета поля мы просто создадим свойство mustField на лету и установим его в 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!