使QLabel文本可选择?

69

我在我的应用程序中有一个显示错误消息的QLabel,我希望使标签中的文本可选择,以便用户可以在需要时复制和粘贴错误消息。

然而,当我用鼠标单击并拖动文本时,什么也不会发生 - 文本没有被选中。

我该如何使QLabel内的文本可通过鼠标选择?


5
给给我踩的人 - 能否解释一下为什么这是一个不好的问题?我该如何改进它? - Cory Klein
我没有给问题点踩,但是这个问题可以通过最少的研究(例如阅读文档)来回答。这是比过早提问更好的方式。你甚至在几分钟后自己回答了这个问题。 - Skalli
16
@Skalli - 你可能不熟悉《Stack Overflow》的一篇文章自己问自己问题并回答是可以的。我利用内置的“回答自己的问题”功能立即回答了这个问题。我在回答中展示了我所做的研究,因为阅读文档和快速谷歌搜索实际上没有帮助到我,并且我希望节省其他人未来的时间。 - Cory Klein
1
那很有道理,我收回之前的说法。我不知道这篇文章,我猜这个问题在那方面是合格的。 :) - Skalli
2个回答

107

代码

QLabel的文本可以通过以下方式使其可由鼠标选择:

label->setTextInteractionFlags(Qt::TextSelectableByMouse);

这是在QLabel文档中找到的。

您可以使用同一函数使链接可通过键盘选择,突出显示URL链接,并使文本可编辑。请参见Qt::TextInteractionFlag

设计师

QLabel 菜单下搜索 textInteractionFlags 并设置标志 TextSelectableByMouse


9
如果您想让鼠标光标在悬停时发生变化,可以添加以下代码: label->setCursor(QCursor(Qt::IBeamCursor)); - Kiruahxh
1
如果您是从谷歌搜索如何在PyQT 6中执行此操作的,请注意: QLabel(text).setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) - Esteban

6

以下是另一种方法,供参考... 您可以创建一个QLineEdit子类,对其进行微调,使其外观和行为与QLabel相似,在构造函数中实现:

 setReadOnly(true);
 setFrame(false);
 QPalette palette = this->palette();
 palette.setColor(QPalette::Base, palette.color(QPalette::Background));
 setPalette(palette);

我认为采纳的答案更简单、更可取,虽然这种方法也可以。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接