Как установить несколько свойств в CSS?

#qt #stylesheet #qtstylesheets #qlineedit

#qt #таблица стилей #qtstylesheets #qlineedit

Вопрос:

Я создал CSS для lineEdit.

LineEdit.cpp

 void MyLineEdit::initStyleSheet()
{
  QString css = Css::instance().css( m_element );
  setProperty( "style", "normal" );
  setStyleSheet( css );
}
  

У меня есть отдельный файл .css для стиля:

MyLineEdit.css

 ....
MyLineEdit[style="Normal"]:focus
{
    border: 1px solid red;
}

MyLineEdit[style="Normal"]:disabled
{
    border: 1px solid gray;
    background: gray;
}
  

Теперь есть одно странное требование: MyLineEdit должен быть вызван метод setNoFrame , в этой функции мы устанавливаем для него еще одно свойство, и это свойство допустимо только для состояния disabled .

Это то, что я сделал:

 MyLineEdit::setNoFrame()
{
  setProperty("noFrame","true");
  initSyleSheet();
}
  

И это мои обновленные данные .css

 ....
MyLineEdit[style="Normal"]:focus
{
  border: 1px solid red;
}

MyLineEdit[style="Normal"]:disabled
{
  border: 1px solid gray;
  background: gray;
}

MyLineEdit[style="Normal", noFrame="true"]:disabled
{
  border: none;
  background: gray;
}
  

Это работает не так, как я ожидал, граница для state по-прежнему существует disabled и noFrame = true . Есть ли у меня ошибка в объединении свойств для CSS выше?

Ответ №1:

Вы действительно, очень близки. Попробуйте

 MyLineEdit[style="Normal"][noFrame="true"]:disabled
{
  border: none;
  background: gray;
}
  

Из документов CSS2 (которые поддерживает Qt StyleSheets):

Несколько селекторов атрибутов могут использоваться для ссылки на несколько атрибутов элемента или даже несколько раз на один и тот же атрибут.

Здесь селектор соответствует всем элементам SPAN, атрибут «hello» которых имеет точное значение «Cleveland», а атрибут «goodbye» имеет точное значение «Columbus»:

 span[hello="Cleveland"][goodbye="Columbus"] { color: blue; }