2011-12-16 8 views
1

Подход с использованием подкласса QStyle и настройка палитры не работают (но работают для других базовых стилей до MyStyle).Можно ли перестроить QProgressBar на OS X?

void MyStyle::drawControl(ControlElement control, const QStyleOption *option, 
          QPainter *painter, const QWidget *widget) const 
{  
    switch(control) 
    { 
     case CE_ProgressBar: 
     { 
      const QStyleOptionProgressBarV2 * pOpts = 
      static_cast<const QStyleOptionProgressBarV2 *>(option); 
      QStyleOptionProgressBarV2 oOpts(*pOpts); 

      QColor progressColor(QColor::fromHsl(50, 160, 162)); 
      oOpts.palette.setColor(QPalette::Highlight, progressColor); 

      // BASESTYLE is QMacStyle 
      BASESTYLE::drawControl(control, &outputOptions, painter, widget); 
     } 
      break; 

     default: 
      BASESTYLE::drawControl(control, option, painter, widget); 
    } 
} 

Есть ли другой способ контролировать внешний вид виджетов под OS X? (Или это вообще невозможно?)

+0

Что вы получите, если вы закомментировать весь код в случае CE_ProgressBar? Создает ли QProgressBar ничто/мусор? Если это так, это означало бы, что вы на правильном пути, но BASESTYLE :: drawControl) (игнорирует вашу преамбулу. –

+0

Да, я могу подтвердить, что если 'BASESTYLE :: drawControl()' в случае 'CE_ProgressBar' удален, то не отображается индикатор выполнения ('BASESTYLE', конечно,' QMacStyle'). – James

+0

В худшем случае вы всегда можете скопировать и вставить код из BASESTYLE :: drawControl() в свой собственный метод, а затем измените его по вкусу ... но может быть более элегантный метод, чем это. Вам нужно будет посмотреть исходный код для BASESTYLE :: drawControl() и посмотреть, как реализован случай CE_ProgressBar, и это должно дать вам некоторые идеи о том, какое влияние вы можете оказать на его поведение. –

ответ

Смежные вопросы