我試圖畫一個複選框QStyledItemDelegate
。我希望複選框與本地外觀不同,但是使用qApp->setStyleSheet()
指定的樣式。我不知道爲什麼,但是當我用QStyle::drawPrimitive
來繪製控制權時 - 它並沒有提到全局qss。如何使用QStyle和指定的QSS繪製控件?
是否有任何解決方案,如何手動繪製複選框與應用程序樣式?
以下代碼,演示截圖我的問題:
第一個複選框是QStyle::drawPrimitive
戰平,第二個複選框是小部件。
#include <QApplication>
#include <QWidget>
#include <QStyle>
#include <QPainter>
#include <QStyleOptionButton>
#include <QCheckBox>
class TestWindow
: public QWidget
{
Q_OBJECT
public:
TestWindow() {}
~TestWindow() {}
void paintEvent(QPaintEvent * event)
{
QPainter p(this);
QStyleOptionButton opt;
opt.state |= QStyle::State_On;
opt.state |= QStyle::State_Enabled;
opt.rect = QRect(10, 10, 20, 20);
style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &opt, &p, this);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyleSheet("QCheckBox::indicator{ border: 1px solid red; }");
TestWindow w;
QCheckBox *cb = new QCheckBox(&w);
cb->move(10, 30);
w.show();
return a.exec();
}
#include "main.moc"
注:它是可能創造無形的複選框,並使用QPixmap::grabWidget
,但這種方法是太重了。
歡迎來到Stack Overflow!你能否請你的答案給出解釋爲什麼這個代碼回答這個問題?僅限代碼答案[不鼓勵](http://meta.stackexchange.com/questions/148272),因爲他們沒有教導解決方案。 – DavidPostill