一、简单的可以直接加载,把样式表放里面就可以了,像这样
QFile styleFile(":/style/style.qss");
if(styleFile.open(QIODevice::ReadOnly))
{
QString setStyleSheet(styleFile.readAll());
a.setStyleSheet(setStyleSheet);
styleFile.close();
}else
{
qDebug("Open failed");
}
二、稍微处理一下,把里面的变量和注释删掉,这样qss表格写起来就方便很大
QMap <QString,QString> colorValue;
QList <QString> key;
while (setStyleSheet.indexOf("*/") != -1) {//去掉注释
int i = setStyleSheet.indexOf("/*");
int j = setStyleSheet.indexOf("*/");
qDebug()<<setStyleSheet.mid(i,j+2-i);
setStyleSheet.remove(i,j+2-i);
}
while (setStyleSheet.indexOf("$") != -1) {//把变量值记录到容器里
int i = setStyleSheet.indexOf("$");
int j = setStyleSheet.indexOf("=");
int k = setStyleSheet.indexOf(";");
if(j>k || j==-1){
break;
}
colorValue[setStyleSheet.mid(i,j-i-1)] = setStyleSheet.mid(j+1,k-j-1);
key<<setStyleSheet.mid(i,j-i-1);
setStyleSheet.remove(0,k+1);
}
for (int i = 0;i<key.length();i++) {//替换原来样式表里的变量为真实值
while (setStyleSheet.indexOf(key[i]) != -1) {
setStyleSheet.replace(setStyleSheet.indexOf(key[i]),key[i].length(),colorValue[key[i]]);
}
}
qDebug()<<setStyleSheet;
a.setStyleSheet(setStyleSheet);
styleFile.close();
}
else
{
qDebug("Open failed");
}
- 删掉注释,找出/和/的位置,把它们直接和本身给删掉
- 找出类似这种变量$text = #222;的位置,并记录到容量里面然后删掉,
- 把qss文档里面的内容找出变量的位置,类似这种$text,然后替换掉刚才容量里面的