QListView中的QT超链接

时间:2014-01-20 14:08:33

标签: c++ qt hyperlink qlistview qstandarditemmodel

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

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

  1. 说明;
  2. 和超链接
  3. 我要做的是在那里使用超链接实际描述,使用用户的默认浏览器打开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));
    

1 个答案:

答案 0 :(得分:1)

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

//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();
}