私は2つのウィジェットを表示するはずのこの小さなテストケースを持っています。もう1つは完全にオーバーラップしています。一方は半透明であるので、もう一方のウィジェットはそれを照らすべきです。Qtがこのスタイルシートタイプセレクタを適用しないのはなぜですか?
そのために、タイプセレクタMenu
(クラス名)を使用して、1つのウィジェットでスタイルシートを設定しました。しかし、ウィジェットを200/255
のファクタで不透明にする代わりに、それは完全に半透明にします。つまり、タイプセレクタがメニューオブジェクトにまったく当てはまらないので、私はもはや青の光が見えません。
代わりに*
セレクタを使用すると、期待どおりに動作します。私は正確にMenu
を報告するmetaObject()->className()
の値をテストしました。誰も私が作ったエラーに私をヒントできますか?これは、はるかに奇妙な振る舞いを示す実際のプログラムのテストケースを減らしたものであり、まずこのテストケースを減らしたいと思っています。
#include <QtGui/QApplication>
#include <QtGui/QWidget>
#include <QtGui/QLayout>
#include <QtGui/QVBoxLayout>
#include <QtGui/QLabel>
#include <QtGui/QResizeEvent>
class Menu: public QWidget {
Q_OBJECT
public:
Menu(bool translucent, QWidget *p):QWidget(p) {
if(translucent) {
setStyleSheet("Menu { background-color: rgba(0, 0, 150, 200) }");
}
QLabel *label = new QLabel(
translucent ? "\n\nHello I'm translucent" : "I'm not translucent");
label->setStyleSheet("color: white; font-size: 20pt");
QLayout *mylayout = new QVBoxLayout;
setLayout(mylayout);
mylayout->addWidget(label);
}
};
class MyWindow : public QWidget {
public:
MyWindow() {
Menu *m1 = new Menu(false, this);
Menu *m2 = new Menu(true, this);
m1->lower();
m2->raise();
}
protected:
void resizeEvent(QResizeEvent *event) {
foreach(QWidget *w, findChildren<QWidget*>()) {
w->setGeometry(0, 0, width(), height());
}
}
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
MyWindow w;
w.show();
app.exec();
}
WOW、私は絶対に*分かりませんでした。ありがとう。 –