2015-06-07 4 views
2

Я пытаюсь изменить только цвет прямоугольника индикатора QCheckBox.Изменение цвета прямоугольника индикатора QCheckBox

В настоящее время мне удается нарисовать правую и нижнюю границу прямоугольника. Возможно, я здесь что-то не так.

Вот мой код:

CheckBoxWidget.cpp

CheckBoxWidget::CheckBoxWidget(QObject *poParent) 
    : QItemDelegate(poParent) 
{ 
} 

void CheckBoxWidget::drawCheck(QPainter *painter, 
           const QStyleOptionViewItem &option, 
           const QRect & rect, 
           Qt::CheckState state) const 
{ 
    QRect oCheckBoxRect = 
      QApplication::style()->subElementRect(QStyle::SE_CheckBoxIndicator, &option); 

    painter->setPen(Qt::white); 
    painter->drawRect(oCheckBoxRect); 

    QItemDelegate::drawCheck(painter, option, oCheckBoxRect, state); 
} 

CheckBoxWidget.h

class CheckBoxWidget : public QItemDelegate 
{ 
    Q_OBJECT 

public: 
    CheckBoxWidget(QObject *poParent = 0); 
    virtual ~CheckBoxWidget(); 

protected: 
    virtual void drawCheck(QPainter *painter, 
          const QStyleOptionViewItem &option, 
          const QRect &, 
          Qt::CheckState state) const; 
}; 

Есть предложения?

ответ

4

Для этого нет необходимости создавать пользовательский делегат. Вы можете использовать stylesheets, чтобы изменить цвет флажка или любого другого виджета по вашему желанию. В следующей таблице стилей установите прямоугольник 3px в прямоугольник прямоугольника.

QCheckBox::indicator { 
    border: 3px solid #5A5A5A; 
    background: none; 
} 

Для того, чтобы установить таблицу стилей вы можете либо использовать Qt Designer или функцию setStylesheet.

Для того, чтобы установить определенный цвет все из следующих справедливы:

border: 3px solid #5A5A5A; 
border: 3px solid red; 
border: 3px solid rgb(255, 120, 100); 
border: 3px solid rgba(255,120,100, 50); // For alpha transparency 
+1

Проблема такого подхода заключается в том, что он меняет весь облик флажком, а не только цвет границы в соответствии с просьбой. При настройке пользовательской таблицы стилей на элементах Qt вам необходимо указать стиль для каждой части элемента. –

+1

К сожалению такой же вопрос как выше. Я установил для фона qcheckbox disabeld значение серого, но я больше не вижу остальную часть флажка. Как я могу пометить тик? То же самое касается QRadioButton. Изменение стиля там делает квадратную кнопку радио: - (Любые идеи, где можно найти информацию о стилизации этих кнопок? – Dariusz

+0

Опираясь на ту же проблему сейчас ... Есть ли прогресс в этом вопросе? – nostradamus