Qt中能够实现逻辑程序与界面分离,
主要是将按钮贴图,颜色绘制等放到qss文件中,然后由相应的窗口加载就可以。
有几点注意:
1.不同的窗口可以加载不同的qss文件。例如程序中有多个窗口,那么你可以为每个窗口写一个qss文件,这样每个窗口就有自己独特的风格了。
而且更换皮肤时,只要将加载的qss文件更换一下就可以。
加载qss的相关代码:
//载入qss界面文件
QFile qss("style.qss"); //绿色中为qss资源文件的路径,根据需要更改
if(!qss.open(QFile::ReadOnly))
{
qDebug("can not open qss !");
return 0;
}
w.setStyleSheet(qss.readAll());
上面中 w 是窗口对象,如果QApplication a(argc, argv); 中 a.setStyleSheet(qss.readAll());则默认为整个程序中所有窗口都是这个qss风格。
2.qss中既可以统一风格,又可以单独定制。例如:
-
- QMainWindow{
- border-image:url(./image/blue.jpg);
- }
- QPushButton{border:0px;border-radius:15px;font-weight:bold;color:red;}
-
-
- QPushButton#pushButton{
- color: white;
- font: bold 10pt;
- border:none;
- border-radius:5px;
- border-image:url(./image/button-yellow.png);
- }
-
- QPushButton#pushButton:hover{
- border-image:url(./image/button-blue.png) ;
- }
-
- QPushButton#pushButton:pressed{
- border-image:url(./image/button-red.png);
- }
-
- QPushButton:hover{
- background:qlineargradient(x1:0, y1:0, x2:0, y2:1,
- stop:0 rgba(100,100,100,200),
- stop: 0.5 rgba(0,255,100,200),
- stop:1 rgba(100,100,100,200));
- }
- QPushButton:focus{
- background:qlineargradient(x1:0, y1:0, x2:0, y2:1,
- stop:0 rgba(150,150,150,150),
- stop: 0.5 rgba(50,50,50,255),
- stop:1 rgba(0,0,0,200));
- }
上述代码中,通过 # 后加控件名字就可以专门为该控件设计风格。这样qss就能具体到每个控件的界面美化,而不用在程序里掺杂,做到界面分离。相关的其他qss的用法可以查阅qt文档。
下面是测试例子效果;

原文地址:http://blog.csdn.net/wangtaohappy/article/details/8777789