2017-09-01 7 views
0

デリゲートクラスとメソッドペイントがあります。それは私のデリゲートの目的は、paintメソッドがQTreeWidgetはQComboboxデリゲートを表示しません

void ComboboxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 
{ 
    QStyleOptionComboBox box; 

    QString text = values[1]; 

    box.currentText = text; 
    box.rect = option.rect; 

    QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &box, painter, 0); 
    QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &box, painter, 0); 
} 

値が付きQMap

ボックスがある

ui->treeWidget->setItemDelegateForColumn(2, box); 

されている

のために私はQTreeWidget列にコンボボックスを表示してくださいしたいと思います2つの変数 - 「こんにちは」と「さようなら」

コンボボックスを描画する代わりに、treewidgetは2番目の列にちょうど "Hello"文字列を表示します なぜですか? どうすれば修正できますか?

+0

とうまくいった。モニターの明るさに何か問題がありますか? Qtのどのバージョンを使用していますか? – olya

+0

https://doc.qt.io/qt-5/qtreewidget.html#setItemWidgetを参照してください。これにより、カスタムデリゲートを使用する代わりに直接ウィジェットを配置できますが、トレウィジェットでのみ動作します – Felix

+0

ありがとう答え、私は間違ったqssで始まると思います。しかし、QStyleOptionComboBoxまたはComboboxDelegateの正しいqssを書く方法がわかりません。 –

答えて

0

あなたはQSSファイルを持っているし、あなたのQComboBoxデリゲートをカスタマイズしたい場合は、paint()メソッドでは、いくつかのコンボボックスを追加し、置き換えるべきである:

QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &box, painter, 0); 

に:私はあなたのコードを試してみました

QComboBox tmp; 
QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &box, painter, &tmp); 
関連する問題