Гиперссылка QT в QListView

Используя Qt, я создал графический интерфейс, который включает в себя QListView виджет.

Этот виджет получает данные от 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));

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]