如何在 QTableView 中打开 URL
在QTableView
(或QTreeView
、QListView
、等等...)
给定一个QStandardItemModel
,其中某些列包含带有URL的文本,我希望它们变得可点击,然后使用QDesktopServices::openURL处理点击()
我希望有一些简单的方法来利用 QLabel 的 textInteraction 标志并将它们填充到表中。我不敢相信没有更简单的方法来处理这个问题。我真的希望我错过了一些东西。
What is the best way to present a clickable URL in a QTableView
(or QTreeView
, QListView
, etc...)
Given a QStandardItemModel
where some of the columns contain text with URLs I'd like them to become clickable and then handle the click by using QDesktopServices::openURL()
I was hoping there would be some easy way to leverage QLabel
's textInteraction flags and to cram them into the table. I can't believe there's not an easier way to handle this. I really hope I'm missing something.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要创建一个委托来进行绘画。代码应该如下所示:
You'll need to create a delegate to do the painting. The code should look something like this:
好吧,您可以使用委托在 qtableview 中渲染富文本,并使用自定义委托重新实现绘制方法,例如:
但是,它不会使超链接可单击。
为此,您可以使用以下技巧。重新实现表/列表视图的 setModel 方法并使用 setIndexWidget。
在上面的示例中,我将第 1 列替换为 qlabels。请注意,您需要取消模型中的显示角色以避免数据重叠。
无论如何,我对基于代表的更好解决方案感兴趣。
Well, you can use delegates to render rich text in a qtableview with custom delegates reimplementing the paint method such as:
However, it will not make hyperlinks clickable.
To do so, you can use the following hack. Reimplement the setModel method of your table/list view and use setIndexWidget.
In the example above, I replace column 1 with qlabels. Note that you need to void the display role in the model to avoid overlapping data.
Anyway, I would be interested in a better solution based on delegates.
遗憾的是,当使用
QTableView
时,使用setOpenExternalLinks()
渲染QLabel
并不容易(与使用QTableWidget< /代码>)。没有神奇的两行代码可以调用并完成工作。
QTextDocument
与setHTML()
结合使用来呈现 html 链接,painter->setWidgetToCell()
--
Sadly, its not that easy to render a
QLabel
withsetOpenExternalLinks()
when using aQTableView
(as opposed to using aQTableWidget
). There are no magic two lines of code you can call and have the job done.QTextDocument
combined withsetHTML()
to render a html linka href
painter->setWidgetToCell()
--