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来说,问题目前并不明显。