【问题标题】:Can't use itemFromIndex in clicked signal of QTreeView with QSortFilterProxyModel不能在带有 QSortFilterProxyModel 的 QTreeView 的点击信号中使用 itemFromIndex
【发布时间】:2010-08-27 17:29:58
【问题描述】:

我有一个 QTreeView,在视图和 QStandardItemModel 之间有一个 QSortFilterProxyModel 来对树进行排序。然后我想通过 clicked() 信号对视图中的点击采取行动。

模型/视图的设置类似于:

mymodel  = new QStandardItemModel(5, 5, this);
mysort = new MySortProxy(this);
mysort->setSourceModel(mymodel);
myview = new QTableView(this);
myview->setSourceModel(mysort);
connect(myview, SIGNAL(clicked(QModelIndex)), this, slot(clickAction(QModelIndex)));

此设置一切正常,并以我想要的方式对我的数据进行排序。当您单击一个项目时,clickAction() 插槽将被调用,并带有所单击项目的索引。然后我尝试从插槽中的索引中获取项目:

void myclass::clickAction(const QModelIndex &index)
{
    QStandardItem *item = mymodel->itemFromIndex(index);
}

但是,itemFromIndex 返回 NULL。

如果我删除 QSortFilterProxyModel 并将模型直接设置为视图中的 sourcemodel,则一切正常。即

myview->setSourceModel(mymodel);    // was setSourceModel(mysort);

mymodel->itemFromIndex(index) 现在按预期返回项目,但显然现在我不能使用自己的排序代理。

谁能告诉我我做错了什么以及当我有一个 sortfilter 代理时如何在点击槽中获取项目?

我正在使用 Qt-4.3.1。

感谢您的帮助,贾尔斯

【问题讨论】:

    标签: qt


    【解决方案1】:

    我相信你想做这样的事情:

    void myclass::clickAction(const QModelIndex &index)
    {
        QStandardItem *item = mymodel->itemFromIndex(mysort->mapToSource(index));
    }
    

    【讨论】:

    • 非常感谢您的回答。不幸的是,由于星期一是英格兰的银行假日,所以我要到星期二才能尝试这个。但是,您的回答敲响了很多警钟,我相信会被证明是正确的,因此我现在将其标记为已接受。我会在星期二尝试后更新它。谢谢。
    猜你喜欢
    • 2018-11-06
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多