Используя Qt, я создал графический интерфейс, который включает в себя QListView
виджет.
Этот виджет получает данные от QStandardItemModel
объект, который состоит из двух столбцов:
То, что я пытаюсь сделать, это на самом деле иметь там описание с гиперссылкой, которая открывает страницу в 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 </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();
}
Других решений пока нет …