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