精华内容
下载资源
问答
  • qss使用

    2015-10-10 09:34:35
    qss相关语法,请百度
    qss相关语法,请百度
    
    //新建qss文件.例如myStyl.qss 
    QPushButton#IM_btn_hall {
    	background-image: url(Resources/IM/im_btn_hall_normal.png);
    	border:none;
    }
    QPushButton#IM_btn_hall:hover {
    	background-image: url(Resources/IM/im_btn_hall_hover.png);
    	border:none;
    }
    QWidget#im_wid_titile {
    	border-image: url(Resources/IM/im_title_top.png);
    }

    	//加载qss样式
    	QFile styleSheet("qss/myStyle.qss");
    	if (!styleSheet.open(QIODevice::ReadOnly))
    	{
    		qWarning("Can't open the style sheet file.");
    		return;
    	}
    	qApp->setStyleSheet(styleSheet.readAll());

    展开全文
  • QSS使用总结

    2020-12-26 11:53:06
    QSS使用总结: 1. 什么是QSS QSS:全称Qt Style sheet即Qt样式表,他是Qt提供的一种用来自定义控件外观的机制。 QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器更少,可以使用的属性也更少, ...

    QSS使用总结:

    1. 什么是QSS
    QSS:全称Qt Style sheet即Qt样式表,他是Qt提供的一种用来自定义控件外观的机制。
    QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器更少,可以使用的属性也更少,
    并且并不是所有的属性都可以在Qt的所有控件上。

    2. QSS的使用
    1 全局QSS文件方式
      一般将项目中所有控件的样式写入一个文件中,然后在程序启动后加载文件然后设置全局的样式
     
    int main(int argc, char* argv[])
    {
        ...
        QFile file(":/qss/default.qss");
        file.open(QFile::ReadOnly);
        QTextStream filetext(&file);
        QString styleSheet = filetext.readAll();
        qApp->setStyleSheet(styleSheet);
        ...

    2 在程序中为某个具体的控制设置样式
    ui->okBtn->setStyleSheet("font-size:30px");

    --->当用户在程序中设置了控件的qss样式,则会覆盖全局的样式

    3. QSS的语法规则
    QSS的规则几乎和CSS相同,一条QSS样式由两部分组成,一部分为选择器 指定了设置样式的控件,另一部分为指定的属性的值,表示哪些属性会收到影响QPushButton{ color: #FF0000}。
    QPushButton表示选择器,指定了所有的QPushButton以及其子类会收到影响,注意凡是继承QPushButton的类都会受到影响,这点与CSS不同,因为CSS没有类/子类的概念仅为标签。
    而后的{ color: #FF0000}则是规则的定义,表明指定前景色为红色,该样式的意义为设置QPushButton类以及子类的所有实例的前景色设置为红色

    如果MyButton继承自QPushButton,么上面的规则也会应用到所有MyButton控件上,但是如果规则是如下的:
    MyButton{color:#FF0000} 
    则只会对MyButton的实例应用红色的前景颜色,而对QPushButton的实例没有应用。

    4. `
    通配选择器:*; 匹配所有的控件
    类型选择器:QPushButton; 匹配所有的QPushButton和其子类的实例
    属性选择器:QPushButton[flat="false"]; 匹配所有flat属性为false的QPushButton实例,也可以使用自定义的属性
    类选择器: .QPushButton; 匹配所有的QPushButton的实例,但是不匹配其子类。这与CSS中的选择器不一样,其前面有个点号
    ID选择器: #myButton; 匹配所有ID为myButton的控件实例,这里的ID指的是objectName指定的值
    后代选择器: QDialog QPushButton; 所有QDialog容器下面的QPushButton, 不管是直接的还是间接的
    子选择器:QDialog > QPushButton; 所有的QDialog容器下面的QPushButton,其中要求QPushButton的直接父类控件使QDialog
    --->另外上面的所有的这些选择器可以联合使用,并且支持一次设置多个选择器类型,用逗号隔开,这点和CSS一样
    例如:frameCut,#frameInterrupt,#frameJoin 表示所有这些id使用一个规则。#mytable QPushButton 表示选择所有id为mytable的容器下面的QPushButton实例。

    5. QSS子控件
    QSS的子控件实际上也是选择器的一种,因为这种选择器与CSS有一些不同,所有单独列出来。QSS的子控件选择器是应用在一些复杂控件上的,典型的例如QComboBox,
    该控件的外观包含几个部分,一般情况下有一个矩形的外边框,右边有一个向下的箭头用于点击之后会有弹出下拉列表。
    例如:QComboBox::drop-down{image:url(":/iamges/dropdown.png")}
    上面的样式指定所有的QComboBox的下拉框箭头的图片为自定义图片dropdown.png
    ::dropdown子控件选择器也可以与上面提到的选择器一起联合使用。
    QComboBox#myComboBox::drop-down{image:url(":/iamges/dropdown.png")}
    指定id名为myComboBox的QComboBox控件的下拉箭头的自动以图片,要注意的是子控件选择器实际上是选择复合控件中的一部分,也就是说对复合控件中的一部分应用样式,
    例如QComboBox的下拉箭头指定图片而不是为QComboBox指定图片

    QSS为很多复杂的复合控件提供了子控件的定义,以方便对这些复合控件的各个部分进行样式设置。限于篇幅,本文也不能将这些可用的子控件都列出来,在安装QtCreator之后自带的帮助中就有很详细的描述。

    https://blog.csdn.net/Staranywhere/article/details/106652678

    6. QSS伪状态
    QSS的伪状态选择器实际上与CSS中的类似,是以冒号开头的一个选择表达式。例如:hover表示当鼠标经过时的状态,他限制了当控件在某一种状态下的时候才能应用QSS规则。伪状态只能描述一个控件的状态,或者是一个复合控件的子控件的状态,所以该伪状态选择器智能放在选择器的最后面
    例如:QComboBox:hover{background-color:red;} 该规则表示当鼠标经过QComboBox上面时,其背景色指定为红色,该伪状态:hover描述的是QComboBox的状态
    伪状态除了可以描述选择器的控件以外,还可以描述子控件选择器所选择的复合控件中的子控件的状态。
    例如: QComboBox::drop-down:hover{background-color:red;} 该规则表示鼠标经过QComboBox的下拉框箭头的时候,该下拉框的背景颜色变成红色。
    几个伪状态可以一起使用, 例如:QCheckBox:hover:checked{color: red} 指定一个当鼠标经过一个选中的QCheckBox的时候,设置其文字的前景颜色为红色

    QSS提供了很多的伪状态,一些伪状态只能用在特定的控件上,具体有哪些伪状态,在Qt的帮助里面有详细的列表,限于篇幅这里也不列出了。

    https://blog.csdn.net/Staranywhere/article/details/106967756

    7. QSS级联与冲突
    QSS中的级联包含以下几个方面
    1 当在同一个控件上应用两个不同的规则, 那么应该应用哪一个规则的问题,也就是如何解决这种冲突
    2 在一个容器控件上设置的QSS规则会对容器里面的控件产生效果(这要取决于容器控件上设置的QSS规则时什么样的规则, 如果其规则仅仅针对容器控件本身则该子控件无影响,如果该QSS规则里面还有对子控件的设置,则自然会对子控件产生效果)。
    级联问题是解决当一个控件被层层父容器包裹,并且在每一层的父容器都有对该控件的样式设置的时候,该控件的最终效果是合并这些父容器上的QSS效果

    冲突问题:
    QPushButton#okButton{color: gray}
    QPushButton{color: red}
    这两条规则都会应用到名为obButton的按钮上,但是他们为同一个属性设置了不同的颜色,这会有冲突,那么要解决这样的冲突就必须考虑到选择器的特异性(具体性),显然QPushButton#okButton仅仅针对对象名为okButton的控件有效果,而QPushButton却对所有的QPushButton的实例或者是其子类的实例有效果,显然QPushButton#okButton选择器更加特殊,也就是更具有特异性。所以最终okButton前景色被应用为灰色。如果两条规则的特异性一样,那么就选择声明靠后的那一条。
    --->另外如果一个选择器应用了伪状态,而另一个没有,那么应用伪状态的选择器更加特殊。
    例如:
        QPushButton:hover{color: white}
        QPushButton{color: red}
    显然QPushButton:hover比单纯的QPushButton更加具有特异性。这两条规则表示当鼠标放在按钮上的时候文字是白色,其他情况下都是红色。    

    --->如下面两个规则的特异性是一样的,那么应该是如何应用呢:即如果两条规则的特异性一样,那么就选择声明靠后的那一条。
    例如:
        QPushButton:hover { color: white }  //如果鼠标经过则前景白色
        QPushButton:enabled { color: red }  //如果按钮是enabled状态则前景红色
    所以默认情况下前景文字是红色的,当鼠标经过的时候并不会变成白色,因为他们的特异性是一样的,所以选择后面的,也就是红色。
    那么换一下顺序会怎样呢:
        QPushButton:enabled { color: red }  //如果按钮是enabled状态则前景红色
        QPushButton:hover { color: white }  //如果鼠标经过则前景白色
    当鼠标经过的时候,就变成白色的了,因为他们的特异性一样,所以选择后面的规则,也就是鼠标经过前景变成白色。
    --->如果把其中的一条的特异性增加,
    例如:
        QPushButton:hover:enabled { color: white }
        QPushButton:enabled { color: red }
    那么第一条的特异性比第二条大,所以应用第一条的规则。
    --->另外一种特异性发生在类型选择器上:
        QPushButton { color: red }   //应用在所有的QPushButton上
        QAbstractButton { color: gray } //应用在所有的QAbstractButton上
    而在类的继承结构上,QAbstractButton是QPushButton的父类,显然QPushButton更加具有特异性,所以QPushButton的前景颜色被应用为红色,而不是灰色。

    有没有一个办法来确定两条QSS规则的特异性大小呢,其实QSS使用的特异性的计算方法与CSS是一样的,详细可以参考CSS2的文档规范,这里还是简要的说明一下,特异性这个东西在CSS中一般被称为权重,权重越大的越优先使用,CSS的计算规则如下:
    A 计算一条规则中id选择器的个数,假设存放在变量a中
    B 计算一条规则中类选择器和属性选择器的个数,粉放在变量b中
    C 计算一条规则中的类型选择器的个数,存放在变量c中 
    4.忽略伪元素,对应QSS中的子控件
    下面是具体的计算方法:
    *             {}  /* a=0 b=0 c=0 -> specificity =   0 */
    LI            {}  /* a=0 b=0 c=1 -> specificity =   1 */
    UL LI         {}  /* a=0 b=0 c=2 -> specificity =   2 */
    UL OL+LI      {}  /* a=0 b=0 c=3 -> specificity =   3 */
    H1 + *[REL=up] {}  /* a=0 b=1 c=1 -> specificity =  11 */
    UL OL LI.red   {}  /* a=0 b=1 c=3 -> specificity =  13 */
    LI.red.level    {}  /* a=0 b=2 c=1 -> specificity =  21 */
    #x34y        {}  /* a=1 b=0 c=0 -> specificity = 100 */
    上面的计算规则是CSS的计算规则,同样可以应用的QSS上。

    关于级联:
    QSS可以设置在QApplication上,也可以设置在一个部件的容器部件上,也可以设置在子孙控件上,一个部件最终使用的样式是合并了他的所有父容器,祖父容器等上面设置的所有样式的结果,这些设置会进行叠加。 如果发生冲突,则选择部件本身设置的样式效果
    --->QSS中似乎为父容器控件本身设置了样式,并不会被子控件继承。
    例如如果QFrame中有一个QPushButton控件,则语句 ui->frame->setStyleSheet{"Frame{color: red; border: 1px solid red}"} 仅仅为QFrame设置样式并不会应用到其里面的QPushButton上。 如果下面的语句就可以:
    ui->frame->setStyleSheet("QPushButton{ color: red; border:1px solid red }");
    ui->frame->setStyleSheet("*{ color: red; border:1px solid red }");

    8 QSS实际应用中要注意的地方
    在使用QSS的时候遇到过一些坑,看似简单,但是如果不知道的话,还是很折磨人的:
    <1>使用QSS设置边框无效,例如:
    border:1px solid red; //Ok
    border:solid 1px red; //Error
    border:red 1px solid; //Error
    border:red solid 1px; //Error
    设置边框颜色和像素的时候,必须是第一种顺序,而CSS中是无所谓的,至于原因,我也不清楚,就是这么坑人。

    <2> QSS设置宽高无效:
    在QSS中设置宽高必须要使用 min-width和min-height,max-width,max-height来设置,用width和height设置是没有任何效果的。

    <3>QComboBox的样式设置的问题:
    QcomboBox是一个复杂的控件,QComboBox由3部分组成,一个是QComboBox的外框,里面有一个下拉按钮,这个按钮可以通过QComboBox::drop-down 来控制其位置,将其定义到QComboBox的左边而不一定是右边。另外在这个下拉按钮上面一般会有一个向下的箭头,这个箭头图像也是可以定制的,通过QComboBox::down-arrow来指定箭头的图像。

    如果要控制QComboBox的弹出下拉列表的样式需要通过:
    QComboBox QAbstractItemView {
      //设置当点击下拉按钮之后弹出的下拉列表的样式,要注意的是这里的样式
      //仅仅只能设置弹出的整个下拉列表范围的矩形的样式,不能设置下拉列表
      //中的每一个下拉项的样式,例如不能设置每一个下拉项高度
    }
    QcomboBox{
      //设置未弹出下拉列表的样式
    }
     
    QComboBox QAbstractItemView::item {
    //设置弹出下拉列表中的每一个下拉项的样式,这里的样式要想生效,必须先
    //对QcomboBox做下面的设置
    //QStyledItemDelegate* itemDelegate = new QStyledItemDelegate();
    //combox->setItemDelegate(itemDelegate);   
    }

    展开全文
  • QSS使用规则

    千次阅读 2017-06-15 15:55:42
    QSS使用规则

    QSS介绍

    QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制。QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器要少,可以使用的QSS属性也要少很多,并且并不是所有的属性都可以用在Qt的所有控件上。


    语法规则

    QSS的语法规则几乎与CSS相同。一条QSS的样式是由两部分组成的,一部分是选择器指定了哪些控件会受到影响,另一部分是指定了属性的值,表示这些控件的哪些属性会受到影响。例如:
    QPushButton { color: red }
    QPushButton表示选择器,指定了所有的QPushButton或者是QPushButton的子类会受到影响。而后面的{color:red}则是规则的定义,表明指定前景颜色是红色。整个意思就是设置QPushButton类以及其子类的所有实例的前景色是红色。


    选择器类型

    1.通配选择器:* ; 匹配所有的控件
    2.类型选择器:QPushButton ; 匹配所有QPushButton和其子类的实例
    3.属性选择器:QPushButton[flat=”false”]; 匹配所有flat属性是false的QPushButton实例,注意该属性可以是自定义的属性,不一定非要是类本身具有的属性
    4.类选择器: .QPushButton ; 匹配所有QPushButton的实例,但是并不匹配其子类。这是与CSS中的类选择器不一样的地方,注意前面有一个点号
    5.ID选择器: #myButton; 匹配所有id为myButton的控件实例,这里的id实际上就是objectName指定的值
    6.后代选择器: QDialog QPushButton ; 所有QDialog容器中包含的QPushButton,不管是直接的还是间接的
    7.子选择器: QDialog > QPushButton; 所有QDialog容器下面的QPushButton,其中要求QPushButton的直接父容器是QDialog
    另外上面所有的这些选择器可以联合使用,并且支持一次设置多个选择器类型,用逗号隔开,这点与CSS一样。


    QSS子控件

    QSS的子控件实际上也是选择器的一种,因为这种选择器与CSS有一些不同,所以单独拿出来说,QSS的子控件选择器是应用在一些复合控件上的,典型的例如QComboBox,该控件的外观包含几个部分,一般情况下有一个矩形的外边框,右边有一个向下的箭头用于提示点击之后会有弹出下拉列表。例如:
    QComboBox::drop-down { image: url(dropdown.png) }
    上面的样式指定所有QComboBox的下拉箭头的图片为自定义的图片dropdown.png
    ::dropdown子控件选择器也可以与上面提到的选择器一起联合使用:
    QComboBox#myQComboBox::drop-down { image: url(dropdown.png) }
    指定id名为myQComboBox的QComboBox控件的下拉箭头的自定义图片,要注意的是子控件选择器实际上是选择复合控件中的一部分,也就是说对复合控件中的一部分应用样式,例如为QComboBox的下拉箭头指定图片,而不是为QComboBox本身指定图片。


    QSS伪状态

    QSS的伪状态选择器实际上与CSS中的类似,是以冒号开头的一个选择表达式,例如:hover表示当鼠标经过时候的状态。他限制了当控件在某一种状态下的时候才能应用QSS规则,伪状态只能描述一个控件的状态,或者是一个复合控件中的子控件的状态,所以该伪状态选择器只能放在选择器的最后面,例如:
    QComboBox:hover{background-color:red;}
    该规则表示当鼠标经过QComboBox上面的时候,其背景颜色指定为红色,该伪状态 :hover描述的是QComboBox的状态。
    伪状态除了描述选择器选择的控件以外,还可以描述子控件选择器所选择的复合控件中的子控件的状态,例如:
    QComboBox::drop-down:hover{background-color:red;}
    表示当鼠标经过QComboBox的下拉箭头的时候,该下拉箭头的背景颜色变成红色。
    此外伪状态可以用一个感叹号表示否,例如:hover表示鼠标经过,而:!hover表示鼠标没有经过的状态。几个伪状态可以同时一起使用,例如:
    QCheckBox:hover:checked { color: white }
    指定一个当鼠标经过一个选中的QCheckBox的时候,设置其文字的前景颜色为白色。


    QSS级联与冲突

    QSS中的级联包含几个方面的概念,一个是当在同一个控件上应用两个不同的规则,那么应该应用哪一个规则的问题,也就是如何解决这种冲突。二个是在一个容器控件上设置的QSS规则会对容器里面的控件产生效果(这要取决于容器控件上设置的QSS规则是什么样的规则,如果容器控件上设置的QSS规则仅仅针对容器控件本身则该规则对子控件没有影响,如果该QSS规则里面有对子控件的设置,则自然会对子控件产生效果),级联问题是解决当一个控件被层层父容器包裹,并且在每一层的父容器上都有对该控件的样式设置的时候,该控件的最终效果是合并这些父容器上的QSS效果。

    冲突问题:
    QPushButton#okButton { color: gray }
    QPushButton { color: red }
    这两条规则都会应用到名为okButton的按钮上,但是他们为同一个属性设置了不同的颜色,这会有冲突,那么要解决这样的冲突就必须考虑到选择器的特异性(这个词怎么理解,我理解为这个特异性为更加特殊,实际上CSS上用权重表示这里的特异性),显然QPushButton#okButton仅仅针对对象名为okButton的控件有效果,而QPushButton却对所有的QPushButton的实例或者是其子类的实例有效果,显然QPushButton#okButton选择器更加特殊,也就是更具有特异性。所以最终okButton前景色被应用为灰色。如果两条规则的特异性一样,那么就选择放在后面的那一条。

    另外如果一个选择器应用了伪状态,而另一个没有,那么应用了伪状态的选择器要更加特殊,例如:
    QPushButton:hover { color: white }
    QPushButton { color: red }
    显然QPushButton:hover比单纯的QPushButton更加具有特异性。这两条规则表示当鼠标放在按钮上的时候文字是白色,其他情况下都是红色。
    如下面两个规则的特异性是一样的,那么应该是如何应用呢:
    QPushButton:hover { color: white } //如果鼠标经过则前景白色
    QPushButton:enabled { color: red } //如果按钮是enabled状态则前景红色
    所以默认情况下前景文字是红色的,当鼠标经过的时候并不会变成白色,因为他们的特异性是一样的,所以选择后面的,也就是红色。
    那么换一下顺序会怎样呢:
    QPushButton:enabled { color: red } //如果按钮是enabled状态则前景红色
    QPushButton:hover { color: white } //如果鼠标经过则前景白色
    当鼠标经过的时候,就变成白色的了,因为他们的特异性一样,所以选择后面的规则,也就是鼠标经过前景变成白色。
    如果把其中的一条的特异性增加,例如:
    QPushButton:hover:enabled { color: white }
    QPushButton:enabled { color: red }
    那么第一条的特异性比第二条大,所以应用第一条的规则。
    另外一种特异性发生在类型选择器上:
    QPushButton { color: red } //应用在所有的QPushButton上
    QAbstractButton { color: gray } //应用在所有的QAbstractButton上
    而在类的继承结构上,QAbstractButton是QPushButton的父类,显然QPushButton更加具有特异性,所以QPushButton的前景颜色被应用为红色,而不是灰色。


    QSS常用设置

    具体参考:http://doc.qt.io/qt-4.8/stylesheet-examples.html

    (1)方箱模型
    在样式表中,每个部件都被看作是一个由四个同心相似的矩形组成的箱体:空白(margin)、边框(border)、填充(padding)和内容(content)。对于一个平面部件——例如一个空白、边框和填充都是0像素的部件——而言,这四个矩形是完全重合的。
    空白区域位于边框外,并且总是透明的。边框为部件提供了四周的框架,其border-style属性可以设置为一些内置的框架风格,如inset、outset、solid和ridge。填充在边框和内容区域之间提供了空白间隔。

    (2)前景与背景
    部件的前景色用于绘制上面的文本,可以通过color属性指定。背景色用于绘制部件的填充矩形,可以通过background-color属性指定。
    背景图片使用background-image属性定义,它用于绘制由background-origin指定的矩形区域(空白、边框、填充或内容)。背景图片在矩形区域内的对齐和平铺方式可以通过background-position和background-repeat属性指定。
    如果指定的背景图片具有alpha通道(即有半透明效果),通过background-color指定的颜色将会透过透明区域。这一功能可以使背景图片在多种环境下重复利用。
    该例子中使用的样式表如下所示:

    QFrame {
        margin: 10px;
        border: 2px solid green;
        padding: 20px;
    
        background-color: gray;
        background-image: url(qt.png);
        background-position: top right;
        background-origin: content;
        background-repeat: none;
    }

    我们也可以分别指定margin-top、margin-right、margin-bottom、margin-left四个属性。

    QFrame {
        margin-top: 14px;
        margin-right: 18px;
        margin-bottom: 20px;
        margin-left: 18px;
    }

    (3)处理伪状态
    部件的外观可以按照用户界面元素状态的不同来分别定义,这在样式表中被称为“伪状态”。例如,如果我们想在一个push button在被按下的时候具有sunken的外观,我们可以指定一个叫做 :pressed 的伪状态。

    QPushButton {
        border: 2px outset green;
        background: gray;
    }
    
    QPushButton:pressed {
        border-style: inset;
    }

    下面是可用的伪状态列表:

    表 1. 伪状态列表
    伪状态 描述
    :checked button部件被选中
    :disabled 部件被禁用
    :enabled 部件被启用
    :focus 部件获得焦点
    :hover 鼠标位于部件上
    :indeterminate checkbox或radiobutton被部分选中
    :off 部件可以切换,且处于off状态
    :on 部件可以切换,且处于on状态
    :pressed 部件被鼠标按下
    :unchecked button部件未被选中

    (4)使用子部件定义微观样式
    许多部件都包含有子元素,这些元素可以称为“子部件”。Spin box的上下箭头就是子部件最好的例子。
    子部件可以通过::来指定,例如QDateTimeEdit::up-button。定义子部件的样式与定义部件非常相似,它们遵循前面提到的方箱模型(即它们可以拥有自己的边框、背景等),并且也可以和伪状态联合使用(例如QSpinBox::up-button:hover)。
    下表列出了可用的子部件类型:

    表 2. 子部件列表
    子部件 描述
    ::down-arrow combo box或spin box的下拉箭头
    ::down-button spin box的向下按钮
    ::drop-down combo box的下拉箭头
    ::indicator checkbox、radio button或可选择group box的指示器
    ::item menu、menu bar或status bar的子项目
    ::menu-indicator push button的菜单指示器
    ::title group box的标题
    ::up-arrow spin box的向上箭头
    ::up-button spin box的向上按钮

    通过指定subcontrol-position和subcontrol-origin属性,子部件可以被放置在部件箱体内的任何位置。并且,子部件的位置还可以使用相对或绝对的方式进一步的调整。具体选择何种调整方式取决于子部件具有固定的大小,还是会随着父部件而变化。

    展开全文
  • Qt的Qss使用源码

    2020-12-24 23:20:57
    下载本文件,先看博客文章《Qt中Qss使用》 包括使用到的图片和源码,还有qss的代码
  • Qt之QSS使用

    千次阅读 2017-11-07 23:33:07
    Qt之QSS使用  CSS,是能够真正做到网页表现与内容分离的一种样式设计语言。相对于传统HTML的表现而言,CSS能够对网页中的对象的位置排版进行像素级的精确控制,支持几乎所有的字体字号样式,拥有对网页...


    Qt之QSS使用


      CSS,是能够真正做到网页表现与内容分离的一种样式设计语言。相对于传统HTML的表现而言,CSS能够对网页中的对象的位置排版进行像素级的精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力,并能够进行初步交互设计,是目前基于文本展示最优秀的表现设计语言。CSS能够根据不同使用者的理解能力,简化或者优化写法,针对各类人群,有较强的易读性。

           借用CSS的灵感, Qt也支持Qt自己的CSS, 简称QSS。同CSS相似,CSS的主要功能与最终目的都是能使界面的表现与界面的元素分离,即质与形的分离,就如同一个人可以在不同的时候穿上不同的衣服一样,css机制的引入,使得设计一种皮肤与界面控件分离的软件成为可能,应用程序也能像web界面那样随意地改变外观。

           在这里,先不讲QSS的语法,因为它跟CSS很相似,但更加简单。先讲一下如何 在QWidget中添加QSS:


           首先当然要创建QSS文件,创建 一个QWidget项目,添加一个qrc资源文件,然后增加一个前缀“/”(很关键)。然后在这里添加一个QSS文件(自己新建一个记事本,修改成myQss.qss),添加到qrc资源文件中,效果是这样的:


    myQss.qss代码:

    [css] view plain copy
    1. QPushButton{  
    2.         background:qlineargradient(spread:pad, x1:0.460227, y1:0, x2:0.465818, y2:0.875, stop:0 rgba(170255255255), stop:1 rgba(255255255255));  
    3.         border-radius:8px;  
    4.         border:2px solid rgb(0170255)  
    5. }  
    6.   
    7. QPushButton:hover{  
    8.         background:qlineargradient(spread:pad, x1:0.460227, y1:0, x2:0.443091, y2:0.898, stop:0 rgba(0255255255), stop:1 rgba(255255255255))  
    9. }  
    10.   
    11. QPushButton:hover:pressed{  
    12.         background:qlineargradient(spread:pad, x1:0.460227, y1:0, x2:0.465818, y2:0.875, stop:0 rgba(170255255255), stop:1 rgba(255255255255));  
    13. }  


    然后在main.cpp中添加以下代码:

    [cpp] view plain copy
    1. #include "widget.h"  
    2. #include <QFile>  
    3. #include <QApplication>  
    4.   
    5. int main(int argc, char *argv[])  
    6. {  
    7.     QApplication a(argc, argv);  
    8.   
    9.     QString qss;  
    10.     QFile qssFile(":/myQss.qss");  
    11.     qssFile.open(QFile::ReadOnly);  
    12.   
    13.     if(qssFile.isOpen())  
    14.     {  
    15.         qss = QLatin1String(qssFile.readAll());  
    16.         qApp->setStyleSheet(qss);  
    17.         qssFile.close();  
    18.     }  
    19.   
    20.     Widget w;  
    21.     w.show();  
    22.   
    23.     return a.exec();  
    24. }  

    运行的效果:

    在ui界面文件中拉了两个pushbutton按钮,发现两个按钮都根据qss文件美化。


    展开全文
  • Qt之QSS使用与基本语法

    千次阅读 2020-05-03 19:29:07
    一、QSS介绍 QSS是一种从CSS借鉴过来的机制,用来实现对控件外观的...二、QSS使用与语法 我们接下来以一个简单地例子来,说明怎么使用qss修改界面外观。 1、举个栗子 设置QLineEdit控件背景色为黄色。 qApp->setS...
  • Qt QSS使用

    2019-12-11 14:50:49
    Qt QSS选择器和CSS2、CSS3的选择器类似,建议先学习或者复习一下CSS选择器的语法。QSS虽然和CSS类型,但有也稍许不同,而且支持的语法也没那么多,具体讲解如下。 1.1 类选择器 /* 匹配QPushButton的实例及其子类 */...
  • qss使用例子

    热门讨论 2012-05-31 23:53:32
    QT学习QSS是很有帮助,实现了所有控件的QSS效果,有喜欢有用的试用吧
  • 本文使用 Zhihu On VSCode 创作并发布>qss是什么qss的全称是 Qt Style Sheets. Qt样式表,用于美化Qt程序界面。语法和web美化的CSS很像,但是功能木有css 强大,只是能用,能满足美化的要求。>qss怎么用首先祭...
  • qslider qss使用

    2021-06-17 19:06:17
    在辅助控制器后面可以设置状态,horizontal就是QSS生效的QSlider的状态,注意这里设置的方向一定要和slider对象的方向一致,如果slider是vertical的,QSS设定的是horizontal的,那么是看不到效果的。 先在qss文件...
  • QSS使用记录

    2019-09-05 11:54:20
    一、 若只设置了父类的qss,继承者会使用父类的style。
  • qss使用指南

    千次阅读 2019-08-09 17:57:47
    参考内容: qss样式表笔记大全(一):qss名词解析(包含相关示例):https://blog.csdn.net/qq21497936/article/details/79401577 qss样式表笔记大全(二):可设置样式的窗口部件列表(上)(包含相关...qss样式表笔...
  • QT QSS 使用

    2015-01-05 11:25:08
    设计Qt程序Ui的时候,可以像WEB端使用CSS一样,使用QSS,使页面美化跟代码层分开,利于维护。 过程如下:  1、建立文本文件,写入样式表内容,更改文件后缀名为qss;  2、在工程中新建资源文件*.qrc...
  • QSS使用小结

    2021-05-20 09:38:30
    二.QSS文件调用代码 QFile file(sPath);//qrc:/style.qss file.open(QFile::ReadOnly); QTextStream filetext(&file); QString stylesheet = filetext.readAll(); qApp->setStyleSheet(stylesheet); 三.问题...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,427
精华内容 3,370
关键字:

qss的使用