c++ - QListView 中的 QT 超链接

标签 c++ qt hyperlink qlistview qstandarditemmodel

使用 Qt,我创建了一个包含 QListView 小部件的 GUI。

此小部件正在从由两列组成的 QStandardItemModel 对象提供数据:

  1. 描述;
  2. 和超链接

我想做的是实际上在其中包含一个超链接的描述,该超链接可以使用用户的默认浏览器打开QListView中的页面。

到目前为止,我尝试的是使用 HTML 实际构建数据,但这只会生成未渲染的纯 HTML 文本。

有人可以帮忙吗?

编辑以显示使用的代码:

用于构建模型的代码:

QStandardItemModel * model = new QStandardItemModel;
for(int i =0; i < newsItems.size(); i++)
{
    QList<QStandardItem *> rowItems;
    rowItems.append(new QStandardItem("Description"));
    rowItems.append(new QStandardItem("http://somesite.com"));

    model->appendRow(rowItems);
}

“QPushButton”使用模型使用的代码

//The cTicExt.getTickerNews(strTicker)  simply returns the QStandardItemModel created above
ui->listView_News->setModel(cTicExt.getTickerNews(strTicker));

最佳答案

我认为你可以在没有模型的情况下做到这一点:

//ListWidget.h
#pragma once
#include <QListWidget>
#include <QListWidgetItem>
#include <QLabel>
#include <QUrl>
#include <QDesktopServices>

class ListWidget: public QListWidget
{
  Q_OBJECT

public:
  ListWidget()
  {
    QListWidgetItem* item = new QListWidgetItem("", this);
    addItem(item);
    QString description("Description:");
    QString hyperlinkText("http://www.stackoverflow.com/");
    QLabel* hyperlinkWidget = new QLabel( QString("<span>%1&nbsp;&nbsp;</span><a href=\"%2\">%2</a>").arg(description).arg(hyperlinkText), this);
    setItemWidget(item, hyperlinkWidget);

    connect(hyperlinkWidget, SIGNAL(linkActivated(const QString&)), this, SLOT(onHyperlinkActivated(const QString&)));
  }

private slots:
  void onHyperlinkActivated(const QString & link)
  {
    QDesktopServices::openUrl( QUrl(link) );
  }
};

//main.cpp
#include <QtWidgets/QApplication>
#include "ListWidget.h"

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);

  ListWidget w;
  w.show();

  return a.exec();
}

关于c++ - QListView 中的 QT 超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21236123/

相关文章:

C++ STL for_each() 和仿函数,它在哪里创建新对象

C++:lambda 中的参数包扩展失败

c# - OpenSSL 错误 "data greater than mod len"

c++ - 使用 Visual Studio/Qt 中止执行

qt - QWidget setGeometry 在不使用 QLayout 的情况下显示

python - Flask - 获取点击的链接信息并显示在呈现的页面上

java - 在 Java 中打印句子

c++ - 如何使用迭代器?

c++ - RSS 提要阅读器。 QT。烦恼

css - Chrome 上链接的奇怪悬停行为