问题
I want a table cell with text aligned to the left and icon aligned to the right side.
But now, im getting both icon and text left aligned, here what i have tried
QtTableWidgetItem * item = new QtTableWidgetItem("program");
item -> setIcon(icon);
ui -> tableWidget -> setItem(i,j,item);
回答1:
To manage the position of the icon and the text you must use a delegate, in this case I use the QStyledItemDelegate
and I overwrite the initStyleOption()
method:
C++ version
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
Then it is established in the delegate:
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);
Python version:
class AlignDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super().initStyleOption(option, index)
option.decorationPosition = QtWidgets.QStyleOptionViewItem.Right
delegate = AlignDelegate(view)
view.setItemDelegate(delegate)
来源:https://stackoverflow.com/questions/52619196/how-to-position-the-qicon-in-the-qt-table-item