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文档。
下面是测试例子效果;