我有一个 QListWidget,它在 iconMode 中用作 viewMode。当我设置一个 QIcon 和一个 QListWidgetItem 的文本时,图标显示在文本的顶部。如果我使用 listMode 中的 QlistWidget 作为 viewMode,图标会显示在文本的左侧。QListWidget 处于 iconMode 时如何在文本左侧显示图标?
我为 QLIstWidgetItems 尝试了 setTextAlignment(Qt::AlignRight)。但它没有用。
我有一个 QListWidget,它在 iconMode 中用作 viewMode。当我设置一个 QIcon 和一个 QListWidgetItem 的文本时,图标显示在文本的顶部。如果我使用 listMode 中的 QlistWidget 作为 viewMode,图标会显示在文本的左侧。QListWidget 处于 iconMode 时如何在文本左侧显示图标?
我为 QLIstWidgetItems 尝试了 setTextAlignment(Qt::AlignRight)。但它没有用。
QStyleOptionViewItem 的 decorationPosition 属性决定了图标的位置,所以解决方法是修改那些属性:
#include <QtWidgets>
class ListWidget: public QListWidget
{
public:
using QListWidget::QListWidget;
protected:
QStyleOptionViewItem viewOptions() const override{
QStyleOptionViewItem option = QListWidget::viewOptions();
option.decorationPosition = QStyleOptionViewItem::Left;
return option;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ListWidget w;
w.setViewMode(QListView::IconMode);
for (QStyle::StandardPixmap sp: {
QStyle::SP_ArrowBack,
QStyle::SP_ArrowDown,
QStyle::SP_ArrowForward,
QStyle::SP_ArrowLeft,
QStyle::SP_ArrowRight,
QStyle::SP_ArrowUp})
{
QIcon icon = QApplication::style()->standardPixmap(sp);
QListWidgetItem *it = new QListWidgetItem("foo");
it->setIcon(icon);
w.addItem(it);
}
w.show();
return a.exec();
}
#include <QtWidgets>
class StyledItemDelegate: public QStyledItemDelegate
{
public:
using QStyledItemDelegate::QStyledItemDelegate;
protected:
void initStyleOption(QStyleOptionViewItem *option,
const QModelIndex &index) const override
{
QStyledItemDelegate::initStyleOption(option, index);
option->decorationPosition = QStyleOptionViewItem::Left;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QListWidget w;
w.setViewMode(QListView::IconMode);
StyledItemDelegate *delegate = new StyledItemDelegate(&w);
w.setItemDelegate(delegate);
for (QStyle::StandardPixmap sp: {
QStyle::SP_ArrowBack,
QStyle::SP_ArrowDown,
QStyle::SP_ArrowForward,
QStyle::SP_ArrowLeft,
QStyle::SP_ArrowRight,
QStyle::SP_ArrowUp})
{
QIcon icon = QApplication::style()->standardPixmap(sp);
QListWidgetItem *it = new QListWidgetItem("foo");
it->setIcon(icon);
w.addItem(it);
}
w.show();
return a.exec();
}