Bueno, se puede utilizar delegados a rendir texto enriquecido en un qtableview con los delegados personalizados reimplementar el método de pintura tales como:
void CHtmlDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QStyleOptionViewItemV4 opt(option);
QLabel *label = new QLabel;
label->setText(index.data().toString());
label->setTextFormat(Qt::RichText);
label->setGeometry(option.rect);
label->setStyleSheet("QLabel { background-color : transparent; }");
painter->translate(option.rect.topLeft());
label->render(painter);
painter->translate(-option.rect.topLeft());
}
Sin embargo, no hará que se pueda hacer clic en los hipervínculos.
Para hacerlo, puede usar el siguiente truco. Vuelva a implementar el método setModel de su vista de tabla/lista y use setIndexWidget.
void MyView::setModel(QAbstractItemModel *m)
{
if (!m)
return;
QTableView::setModel(m);
const int rows = model()->rowCount();
for (int i = 0; i < rows; ++i)
{
QModelIndex idx = model()->index(i, 1);
QLabel *label = new QLabel;
label->setTextFormat(Qt::RichText);
label->setText(model()->data(idx, CTableModel::HtmlRole).toString());
label->setOpenExternalLinks(true);
setIndexWidget(idx, label);
}
}
En el ejemplo anterior, reemplazo la columna 1 con q etiquetas. Tenga en cuenta que debe anular la función de visualización en el modelo para evitar la superposición de datos.
De todos modos, estaría interesado en una mejor solución basada en los delegados.
Kaleb , esta es la única forma de pintar hipervínculos en una vista de tabla, y topicstarter quería darse cuenta de cómo hacer enlaces clicables allí, sin poner un QTextBrowser en cada celda. –
Estoy muy preocupado, ¿cómo puedo hacerlo, también, si conoce el camino, por favor, díganos cómo. –
También debe volver a implementar QAbstractItemDelegate :: editorEvent() para recibir clics del mouse, y si el clic está en un enlace, use QDesktopServices :: openUrl() para abrir la URL. –