1

QItemDelegate特定の にを設定することは可能QTreeWidgetItemですか? QTreeWidgetItemの一部を特定の色で着色する必要があります。

私たちが持っているようにそれは可能QAbstractItemView::setItemDelegateForRowだと思いますが、方法がわかりません。QAbstractItemView::setItemDelegateForRow内の子行にカスタム デリゲートを設定する必要があるため、使用できませんQTreeWidget

誰かがその解決策を知っていますか?

4

4 に答える 4

3

デリゲートで直接使用することはできませんQTreeWidgetItem(おそらく、このアイテムのリストをデリゲート内に格納できますが、効率的ではないと思います)。デリゲートはQModelIndexさまざまなロール内のデータと連携するためです。Qt::UserRole+1デリゲート内でデータを設定してアクセスできます。例えば:

QTreeWidgetItem *cities = new QTreeWidgetItem(ui->treeWidget);
//...
cities->setData(0,Qt::UserRole+1,"chosen one");

QTreeWidgetItem *osloItem = new QTreeWidgetItem(cities);
//...

QTreeWidgetItem *berlinItem = new QTreeWidgetItem(cities);
//...
berlinItem->setData(0,Qt::UserRole+1,"chosen one");

デリゲート内 (単なる例):

    void ItemDelegatePaint::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QString txt = index.model()->data( index, Qt::DisplayRole ).toString();

    if( option.state & QStyle::State_Selected )
    {
        if(index.data(Qt::UserRole+1).toString() == "chosen one")
            painter->fillRect( option.rect,Qt::green );
        else
            painter->fillRect( option.rect, option.palette.highlight() );
    }else
    if(option.state & QStyle::State_MouseOver)
    {
        if(index.data(Qt::UserRole+1).toString() == "chosen one")
            painter->fillRect( option.rect,Qt::yellow );
        else
            painter->fillRect( option.rect, Qt::transparent );
    }
    else
    {
        QStyledItemDelegate::paint(painter,option,index);
    }
}
于 2014-12-03T14:29:43.630 に答える
0

QTableWidget に対して実行しました。すべての QTreeWidgetItem の値を確認し、背景色/色を設定する必要があります。

たとえば、私の QTableWidget では、ループで次のようなことを行いました。

if(良品): MyQTableItem.setBackground(QtGui.QColor(255,255,255))

于 2014-12-03T14:22:46.960 に答える
0

QTreeWidgetItem で qss を使用して、色または背景色を変更できます。

于 2014-12-03T14:15:04.157 に答える