gpt4 book ai didi

c++ - 即使我在 QStyledItemDelegate 中设置 Qt::TextSelectableByMouse,QLabel 文本也无法选择

转载 作者:行者123 更新时间:2023-11-30 03:04:10 24 4
gpt4 key购买 nike

我有一个 QStyledItemDelegate 类型的简单项目委托(delegate),在它的绘制方法中我有这段代码。它呈现得很好,但这里的主要问题是我希望可以选择文本进行复制,但这行不通。

void ItemDelegate::paintBody( QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index ) const
{
painter->save();

QLabel *l = new QLabel();
l->setTextFormat(Qt::RichText);
l->setTextInteractionFlags(Qt::TextSelectableByMouse);
l->setGeometry(option.rect);
l->setText("This is test");
l->setStyleSheet("QLabel { background-color : transparent; }");
l->render(painter, option.rect.topLeft());

painter->restore();
}

最佳答案

因为您所做的只是绘制 QLabel。 QLabel 在您调用的模型 View 中并不“存在”,它仅以您创建它的状态呈现

你应该使用

QStyle::drawControl( ControlElement element,
const QStyleOption* option,
QPainter* painter,
const QWidget* widget = 0 ) const;

绘制标签。不要在每次需要绘制时都创建一个新的 QLabel,这不仅效率低下,而且不删除它还造成了所有内存泄漏之母...

不过更重要的是,选择文本实际上应该是编辑委托(delegate)的一部分,所以你应该重写

QWidget* QAbstractItemDelegate::createEditor( QWidget* parent,
const QStyleOptionViewItem& option,
const QModelIndex& index ) const;

返回一个可以显示可编辑富文本的小部件。

关于c++ - 即使我在 QStyledItemDelegate 中设置 Qt::TextSelectableByMouse,QLabel 文本也无法选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893532/

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