Как установить несколько свойств в CSS? - PullRequest
1 голос
/ 15 марта 2019

Я создал 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;
}

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

1 Ответ

1 голос
/ 15 марта 2019

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

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; }
...