如何在CSS中设置多个属性?

时间:2019-03-15 14:09:34

标签: qt stylesheet qtstylesheets qlineedit

我已经为LineEdit创建了CSS。

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

它无法正常工作,状态disablednoFrame = true的边界仍然存在。在组合上述CSS的属性时是否出错?

1 个答案:

答案 0 :(得分:1)

您真的很接近。试试

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

从CSS2文档(其中Qt StyleSheets supports):

  

可以使用多个属性选择器来引用元素的多个属性,甚至可以多次引用同一属性。

     

此处,选择器匹配所有SPAN元素,这些元素的“ hello”属性的值恰好为“ Cleveland”,而其“再见”属性的值恰好为“ Columbus”:

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