Qt-为多个标签设置样式表

时间:2017-09-06 08:39:37

标签: qt

我的窗口中有大约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);

3 个答案:

答案 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);