2

QWidget を継承して、TaskBox という名前のクラスを作成しました。
TaskBox に QGridLayout を適用しました。
レイアウトは複数の QLabels で構成されています。

スタイル シートを設定して、TaskBox の背景色を変更しました。
次のようになります。

ここに画像の説明を入力

これは私が欲しいもので、私はそれに満足しています。

問題は、TaskBox クラスに Q_OBJECT マクロを追加したいということです。(シグナルとスロットを使用する必要があるため)

Q_OBJECT マクロを追加すると、TaskBox オブジェクトは次のようになります。

ここに画像の説明を入力

スタイル シートが QGridLayout のセルに分割されているようです。

ここに私の TaskBox クラスがあります:

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

プロパティ名を使用して、StyleSheet の設定対象のあいまいさを解消してみてください

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 に答える