2

我继承了 QWidget 来创建一个名为(比如说..)TaskBox 的类。
我已将 QGridLayout 应用到我的 TaskBox。
布局由几个 QLabels 组成。

我通过为其设置样式表来更改任务框的背景颜色。
现在看起来像这样:

在此处输入图像描述

这就是我想要的,我很满意。

问题是,我想将 Q_OBJECT 宏添加到 TaskBox 类。(因为我需要使用信号和插槽)

添加 Q_OBJECT 宏后,我的 TaskBox 对象变成这样:

在此处输入图像描述

看起来样式表在 QGridLayout 中被分解为单元格。

这是我的任务框类:

class TaskBox : public QWidget{

Q_OBJECT

public:


    QLabel * title;
    QLabel * description;
    QGridLayout * layout;


   TaskBox(){

       layout = new QGridLayout();

       setRandomColor();   //Function is available below


       title = new QLabel("Something");
       title->setStyleSheet("color:white;");


       description = new QLabel("Something again");
       description->setStyleSheet("color:white;");


       layout->addWidget(title, 0,0);
       layout->addWidget(description,1,0);


       layout->setColumnStretch(0,2);
       layout->setColumnStretch(1,1);

       setLayout(layout);


   }


   void setRandomColor(){

        setStyleSheet("border-radius: 5px;background-color:rgb(" + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + ");");
   }


};

我不明白发生了什么事。
感谢您的任何帮助!

4

2 回答 2

1

子类化时QWidget,您需要重写该paintEvent函数以使样式表正常工作。

这是您应该如何做的:

void CustomWidget::paintEvent(QPaintEvent *)
 {
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }
于 2014-08-04T12:18:45.673 回答
1

尝试使用属性名称来消除您设置样式表的歧义

在您的 TaskBox 构造函数中:

setProperty("taskbox", true);

接着:

   void setRandomColor(){

        setStyleSheet("*[taskbox=\"true\"] {border-radius: 5px;background-color:rgb(" + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + ");}");
   }
于 2014-08-04T12:52:29.103 回答