Seite 1 von 1

QComboBox und Alignment

Verfasst: 9. März 2010 18:20
von ole
Hallo,

Gibt es eine Möglichkeit (z.B. mit Style Sheets) den Text in der QComboBox zentriert auszurichten? Also ich meine nicht den Text in der Popup Box, sondern den aktuellen.

Danke!

Verfasst: 10. März 2010 15:34
von ole
Hab eine mögliche Lösung gefunden.
Man erreicht einen ähnlichen Effekt, wenn man die QComboBox editierbar macht und das dadurch erreichbare QLineEdit disabled und anpasst.

Gruß

Re: QComboBox und Alignment

Verfasst: 22. März 2013 13:04
von russkij
Diese Methode hat den Effekt, dass die Combobox trotzdem als eine Editierbare ausschaut.

Es gibt noch folgende Möglichkeit:

Code: Alles auswählen


class MyCombo : public QComboBox
{
public:
   MyCombo(QWidget *parent) : QComboBox(parent), m_arrowWidth(18)
   {
   }
   void MyCombo::paintEvent ( QPaintEvent * event )  
   {
      //return QComboBox::paintEvent(event);
      QStylePainter painter(this);
      painter.setPen(palette().color(QPalette::Text));
      QStyleOptionComboBox opt;
      initStyleOption(&opt);
      painter.drawComplexControl(QStyle::CC_ComboBox, opt);
      opt.direction = Qt::RightToLeft;

      if( style() )
      {
         QRect rc = style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, this);
         m_arrowWidth = rc.width();
      }
      opt.rect.setRight(opt.rect.right() - m_arrowWidth);
      painter.drawControl(QStyle::CE_ComboBoxLabel, opt);
   }

private:
   int m_arrowWidth;
};
class MyDelegate : public QItemDelegate
{
public:
   MyDelegate(QWidget *parent): QItemDelegate(parent)
   {}
   void paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const   
   {
      QStyleOptionViewItem myOption = option;

      myOption.rect.setRight(option.rect.right() - 18);  //@TODO breite des pfeiles
      QItemDelegate::paint(painter, myOption, index);
   }
};


 MyCombo *mComboBox3 = new MyCombo(dlg1);
   mComboBox3->setItemDelegate(new MyDelegate(mComboBox3));
   mComboBox3->addItem("1.000");
   mComboBox3->addItem("2.000");
   mComboBox3->addItem("345.000");
   mComboBox3->addItem("9.000");

   for(int i = 0; i < mComboBox3->count(); i++)
      mComboBox3->setItemData(i, Qt::AlignRight, Qt::TextAlignmentRole);