gpt4 book ai didi

qt - 如何在 QLIstWidgetItem 中的文本左侧设置图标?

转载 作者:行者123 更新时间:2023-12-05 05:10:28 26 4
gpt4 key购买 nike

我有一个 QListWidget,它在 iconMode 中用作 viewMode。当我为 QListWidgetItem 设置 QIcon 和文本时,图标显示在文本的顶部。如果我在 listMode 中使用 QlistWidget 作为 viewMode,图标会显示在文本的左侧。 QListWidget 处于 iconMode 时,如何在文本左侧显示图标?

我为 QLIstWidgetItems 尝试了 setTextAlignment(Qt::AlignRight)。但它没有用。

最佳答案

QStyleOptionViewItem的decorationPosition属性决定了图标的位置,所以解决办法就是修改那些属性:

  • 重写 QListWidget 的 viewOptions() 方法:
#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();
}
  • 重写 QStyledItemDelegate 的 initStyleOption() 方法
#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();
}

enter image description here

关于qt - 如何在 QLIstWidgetItem 中的文本左侧设置图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56617364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com