gpt4 book ai didi

c++ - 如何超链接到 QAbstractItemModel 中的项目?

转载 作者:行者123 更新时间:2023-11-27 23:40:08 25 4
gpt4 key购买 nike

使用的 Qt 版本:4.7.1 和 4.8

我将分层数据存储为从 QAbstractItemModel 派生的模型中的节点。我的应用程序 GUI 中有一个 QTreeView 来显示分层数据。 (分层数据对于这个问题可能不是必需的;我遇到的一般问题适用于任何模型和 View 中的任何类型的数据。)

我的应用程序 GUI 中有一个显示超链接的文本框(QPlainTextEdit 小部件,但这不是必需的)。当用户点击超链接时,我可以拦截它并获取超链接的 URL。到目前为止,还不错。

当我拦截该超链接时,我将使 QTreeView 导航到特定节点,根据需要展开其父节点,以便用户可以看到它。

超链接的 URL 将采用让我知道正在请求节点的格式,并将包含有关该特定节点的标识信息。例如:

<a href="node://something">Click me to see node A</a>

因此,问题是:可以识别特定节点并可以编码为文本字符串的东西是什么?

我一直在阅读有关 QPersistentModelIndex 的内容。这听起来像是一个合理的开始。当我格式化超链接时,我肯定会知道特定节点的QModelIndex,并且可以从中构造一个QPersistentModelIndex。但是我迷失了如何将其转换为字符串,然后再将字符串转换回 QModelIndex,我可以从中推断出特定的节点。

如有任何建议,我们将不胜感激。

最佳答案

您可以声明自定义 data role在您的模型中,并为您的每个项目设置此角色的唯一值。

//MyModel.h
class MyModel : public QAbstractItemModel
{
enum MyRoles {
UrlRole = Qt::UserRole
};
// (...)
}

//MyModel.cpp
QVariant MyModel::data(const QModelIndex &index, int role) const
{
if (role == UrlRole)
{
return "uniqueUrl"; //Up to you to decide what you return here
}
// (...)
}

然后在执行搜索时,只需使用您模型的 match function匹配您的唯一字符串并从列表中获取第一个索引。

QModelIndex MyDialog::getIndexForUrl(QString myUrl)
{
QModelIndex index = QModelIndex();
QModelIndexList resultList = ui->treeView->model()->match(QModelIndex(),
MyModel::UrlRole, "uniqueUrl", 1, Qt::MatchFixedString | Qt::MatchCaseSensitive);

if (!resultList.empty())
{
index = resultList.first();
}
return index;
}

您可能需要根据您定义模型的方式调整标志和起始索引。

关于c++ - 如何超链接到 QAbstractItemModel 中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55839656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com