Qt QSS 设置文件

Qt Style Sheets 为定制界面带来了极大方便,通常情况下,使用某对象的setStyleSheet方法进行设置,如下:

//改变 QCheckBox 的style
void setCheckBoxStyle(QCheckBox *checkBox)
{
    //
    checkBox->setStyleSheet("QCheckBox::indicator:unchecked{"
                            "image:url(:/checkbox/checkbox_normal)}"
                            "QCheckBox::indicator:hover{"
                            "image:url(:/checkbox/checkbox_hover)}"
                            "QCheckBox::indicator:pressed{"
                            "image:url(:/checkbox/checkbox_press)}"
                            "QCheckBox::indicator:checked{"
                            "image:url(:/checkbox/checkbox_selected_normal)}"
                            "QCheckBox::indicator:checked:hover{"
                            "image:url(:/checkbox/checkbox_selected_hover)}"
                            "QCheckBox::indicator:checked:pressed{"
                            "image:url(:/checkbox/checkbox_selected_press)}"
                            ""
                            "QCheckBox {font-weight: 450; font-size: 12px; color:#112937;}"
                            );
}

 

这样做能达到目的,但是基本上每个对象都有一个setStyleSheet方法,位置不定,难以维护。

 

一种好的方法是将所有qss代码写个一个文本文件中,在应用程序开始时加载,如下:

    QApplication a(argc, argv);

    QFile qss(":/qss/logindialog.qss");
    qss.open(QFile::ReadOnly);
    a.setStyleSheet(qss.readAll());
    qss.close();

    LoginDialog w;
    w.show();
    
    return a.exec();


 

其中logindialog.qss中只定制样式即可,内容如下:

QCheckBox::indicator:unchecked{
    image:url(:/checkbox/checkbox_normal)
}

QCheckBox::indicator:hover{
    image:url(:/checkbox/checkbox_hover)
}

QCheckBox::indicator:pressed{
    image:url(:/checkbox/checkbox_press)
}

QCheckBox::indicator:checked{
    image:url(:/checkbox/checkbox_selected_normal)
}

QCheckBox::indicator:checked:hover{
    image:url(:/checkbox/checkbox_selected_hover)
}

QCheckBox::indicator:checked:pressed{
    image:url(:/checkbox/checkbox_selected_press)
}

QCheckBox {
    font-weight: 450;
    font-size: 12px;
    color:#112937;
}


 这种方式能轻易的实现换肤效果,需要特别注意的是, 使用如下对象名设置QSS时:

QPushButton#button{
    border-image:url(:/button/button_normal);
    background:transparent;
}


在创建button时,需要设置ObjectName,这样QSS才能识别,如下:

    button = new QPushButton(this);
    button->setObjectName("button");//设置对象名后,在QSS中才能使用QPushButton#button进行配置


 

常用的qss样式见[Qt 常用样式]。

 

本文思路来自TOM, Thanks.

你可能感兴趣的:(Qt QSS 设置文件)