Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 单击视图中的项目时从另一个小部件访问自定义模型数据_C++_Qt - Fatal编程技术网

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

C++ 单击视图中的项目时从另一个小部件访问自定义模型数据,c++,qt,C++,Qt,我有一个QListView,它将自定义QAbstractListModel设置为模型。该模型从数据库加载数据,并将其全部放入QList dataList数据结构中。每个QHash数据都包含data[“id”]和data[“name”]之类的内容。data[“name”]值通过模型的data()方法传递给QListView。现在我要做的是,当在QListView中单击某个项目时,从另一个小部件访问属于该项目的QHash 所以像这样的事情 connect(视图、信号(单击)(…)、someOther

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

所以像这样的事情

connect(视图、信号(单击)(…)、someOtherWidget、SLOT(foo(…))

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

void someOtherWidget::foo(constqhash&customData){QMessageBox::information(这是“用户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> >();
QHashMap&model=
视图->模型()->数据(视图->所选索引(),myCustomRole)
.value();

您可以在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> >();
QHashMap&model=
视图->模型()->数据(视图->所选索引(),myCustomRole)
.value();

QListView类有一个方便的clicked()信号,用于传递已单击项目的QDataIndex。只需为您的模型定义一个单击的插槽和自定义信号:

signals:
    void elementSelected (QStringHash _element); // Also, there's a string hash
                                                 // class, so save the <>
public slots:
    void onClicked (const QModelIndex &_index);
在onClicked中,发出elementSelected()信号


最后,只需将所有信号连接起来:单击()从列表视图连接到模型,将elementSelected()从模型连接到自定义小部件。如果确实需要视图而不是模型来发出elementSelected()信号,则必须定义从QListView派生的具有类似信号的类,然后连接elementSelected()从model到elementSelected()的信号来自此新类。将信号相互连接完全可以。

QListView类有一个方便的clicked()信号,用于传递已单击项目的QDataIndex。只需为您的模型定义一个单击的插槽和自定义信号:

signals:
    void elementSelected (QStringHash _element); // Also, there's a string hash
                                                 // class, so save the <>
public slots:
    void onClicked (const QModelIndex &_index);
在onClicked中,发出elementSelected()信号


最后,只需将所有信号连接起来:单击()从列表视图连接到模型,将elementSelected()从模型连接到自定义小部件。如果确实需要视图而不是模型来发出elementSelected()信号,则必须定义从QListView派生的具有类似信号的类,然后连接elementSelected()从模型到元素的信号selected()从这个新类发出信号。将信号相互连接完全可以。

这里的问题到底是什么?+1对Chris来说,问题目前并不明显。这里的问题到底是什么?+1对Chris来说,问题目前并不明显。