c++ - 单击 View 中的项目时从另一个小部件访问自定义模型数据

标签 c++ qt

我有一个 QListView设置自定义 QAbstractListModel作为模型。该模型从数据库加载数据并将其全部放入 QList<QHash<QString, QString> > dataList 中数据结构。每个QHash<QString, QString> data包含类似 data["id"] 的内容和 data["name"] . data["name"]值传递给 QListView通过模型的 data()方法。现在我要做的是访问 QHash<QString, QString>当在 QListView 中单击项目时属于来自另一个小部件的单击项目.

所以像这样...

connect(view, SIGNAL(clicked(...)), someOtherWidget, SLOT(foo(...))

例如,在 foo() 中我们可以做...

void someOtherWidget::foo(const QHash<QString, QString>& customData) { QMessageBox::information(this, "User ID", customData["id"]; }

它会在消息框中显示项目的 id

最佳答案

您可以在 data() 函数中使用特殊角色。 data() 然后将返回 QHash

QVariant yourModel::data( QModelIndex index, int role )
{
    ....
    if( role == myCustomRole )
    {
        return QVariant::fromValue( myData[ index.row ] )
    }
    ....
}

然后在你的 foo 函数中

QHashMap<QString, QString> & model = 
    view->model()->data( view->selectedIndex(), myCustomRole )
        .value< QHashMap<QString, QString> >();

关于c++ - 单击 View 中的项目时从另一个小部件访问自定义模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7601069/

相关文章:

c++ - OpenGL Sprite 绘制质量低

c++ - 无法将运行时类绑定(bind)到 XAML T 必须是 WinRT 类型

c++ - Qt更新显示的QImage

qt - 如何在Qt Creator中选择自定义编译器 "Tool chain"

c++ - .cu 源文件中默认包含哪些 header ?

c++ - 在哪里可以找到适用于 Windows Mobile 的灵活日志记录库?

c++ - retranslateUi的自动调用

c++ - 在 Windows 上安装 QJson

qt - 如何在paintEvent之外获取QPainter的字体规范?

c++ - 编译时"one or more multiply defined symbols found"错误