我的窗口中有大约20个标签。我想为其中10个设置相同的样式表,同时为其他样式设置另一个样式。如果没有为每个标签单独设置样式表,有没有更好的方法呢?
以下是我的代码中的代码段:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// Some code
this->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(65, 193, 244)");
ui->label_id->setStyleSheet("color: rgb(60, 60, 60); "
"background-color: rgb(0, 0, 0); "
"border: 1px solid rgb(60, 60, 60);"
"border-radius: 10px");
ui->label_nickname->setStyleSheet("color: rgb(60, 60, 60); "
"background-color: rgb(0, 0, 0); "
"border: 1px solid rgb(60, 60, 60);"
"border-radius: 10px");
ui->label_name->setStyleSheet("color: rgb(255, 255, 255); "
"background-color: rgb(1, 153, 26); "
"border: 1px solid rgb(26, 237, 61); "
"border-radius: 10px");
ui->label_age->setStyleSheet("color: rgb(255, 255, 255); "
"background-color: rgb(1, 153, 26); "
"border: 1px solid rgb(26, 237, 61); "
"border-radius: 10px");
// Some code
}
更新:基于PhạmAnhTuấn回答:
this->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(65, 193, 244);"
"QLabel[type=1]"
"{"
"color: rgb(60, 60, 60);"
"background-color: rgb(0, 0, 0);"
"border: 1px solid rgb(60, 60, 60);"
"border-radius: 10px;"
"}"
);
ui->label_mstatus_yaw->setProperty("type", 1);
ui->label_mstatus_yaw->style()->unpolish(ui->label_mstatus_yaw);
ui->label_mstatus_yaw->style()->polish(ui->label_mstatus_yaw);
答案 0 :(得分:1)
编写一个派生自StyledLabel
的类QLabel
,并在初始化期间设置自己的样式。
然后,您可以使用Qt Creator / Designer中的推广小工具功能,让UI中的标签为StyledLabel
类型。
答案 1 :(得分:1)
您可以使用动态属性和样式表。请参阅:https://wiki.qt.io/Dynamic_Properties_and_Stylesheets
您可以为整个ui设置样式表:
QLabel[type="1"]
{
color: rgb(60, 60, 60);
background-color: rgb(0, 0, 0);
border: 1px solid rgb(60, 60, 60);
border-radius: 10px;
}
QLabel[type="2"]
{
color: rgb(60, 60, 60);
background-color: rgb(0, 0, 0);
border: 1px solid rgb(60, 60, 60);
border-radius: 10px"
}
然后改变"输入"标签的属性
ui->label_id->setProperty("type", 1);
this->style()->unpolish(ui->label_id);
this->style()->polish(ui->label_id);
ui->label_nickname->setProperty("type", 2);
this->style()->unpolish(ui->label_nickname);
this->style()->polish(ui->label_nickname);
请记住在之后进行取消抛光和抛光,样式表将应用于每个"类型" QLabel 示例代码:https://drive.google.com/file/d/0Bw2t2i4cHmo_SmdMeGdfZ0VLb3M/view?usp=sharing
答案 2 :(得分:1)
除了其他方法之外,您可以轻松地迭代固定的小部件列表。它们只是指针,你可以随心所欲地使用C ++。
const char stylesheet[] = "color: rgb(60, 60, 60); "
"background-color: rgb(0, 0, 0); "
"border: 1px solid rgb(60, 60, 60);"
"border-radius: 10px";
// C++11
for (auto w : {ui->label_id, ui->label_nickname, ui->label_name, ui->label_age})
w->setStyleSheet(stylesheet);
// C++98
QWidget * const widgets[] = {ui->label_id, ui->label_nickname, ui->label_name, ui->label_age};
int const count = sizeof(widgets)/sizeof(widgets[0]);
for (int i = 0; i < count; ++i)
widgets[i]->setStyleSheet(stylesheet);