1

カスタマイズするために QComboBox をサブクラス化しました。カスタマイズを開始する前に、スタイル シートが適切に適用されているかどうかをテストするために、次の paintEvent() メソッドを作成しました。ただし、このpaintEventを使用すると、選択したアイテムが表示されません(すでに選択されているアイテム、または新しく選択したアイテム)。

class MyComboBox: public QComboBox
{
    Q_OBJECT
public:
    MyComboBox(QWidget *parent = 0): QComboBox(parent){}

    virtual void paintEvent(QPaintEvent* pEvent)
    {
    QStylePainter painter(this);
    QStyleOptionComboBox opt;
    initStyleOption(&opt);
    painter.drawComplexControl(QStyle::CC_ComboBox, opt);
    QVariant itemData = this->itemData( this->currentIndex(), Qt::DisplayRole);
    if(!itemData.isNull() && qVariantCanConvert<QPen>(itemData))
        style()->drawItemText(&painter,this->rect(),Qt::AlignLeft,(this->palette()), true, itemData.toString());
    }
};

paintEvent を修正するにはどうすればよいですか? また、さまざまな Qt コントロールの paintEvent に関するドキュメントはありますか?

4

1 に答える 1

0

ここでの問題は、派生クラスで最初に呼び出さずに基本クラスのメソッドをオーバーライドすることだと思います。派生クラスのメソッドで呼び出す必要があります

于 2012-10-03T09:31:01.003 に答える