Как разместить QIcon в элементе таблицы Qt?

Я хочу, чтобы ячейка таблицы была выровнена по левому краю, а значок - по правой стороне.

Но теперь я выровняю значок и текст по левому краю, вот что я попробовал

QtTableWidgetItem * item = new QtTableWidgetItem("program");
item -> setIcon(icon);
ui -> tableWidget -> setItem(i,j,item);

1 ответ

Для управления положением значка и текста необходимо использовать делегата, в этом случае я использую QStyledItemDelegate и я перезаписываю initStyleOption() метод:

aligndelegate.h

#ifndef ALIGNDELEGATE_H
#define ALIGNDELEGATE_H

#include <QStyledItemDelegate>

class AlignDelegate: public QStyledItemDelegate{
public:
    using QStyledItemDelegate::QStyledItemDelegate;
protected:
    void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override
    {
        QStyledItemDelegate::initStyleOption(option, index);
        option->decorationPosition = QStyleOptionViewItem::Right;
    }
};

#endif // ALIGNDELEGATE_H

Затем в делегате устанавливается:

AlignDelegate *delegate = new AlignDelegate(ui->tableWidget);
ui->tableWidget->setItemDelegate(delegate);

QTableWidgetItem *item = new QTableWidgetItem("foo text");
item->setIcon(icon);
ui->tableWidget->setItem(i, j, item);

Другие вопросы по тегам