标签: qabstractitemmodel

如何在QAbstractItemModel和QTreeView类中找到Subitem?

问题:如何在带有方法的QTreeView加载QAbstractItemModel模型中查找子项model->match()

问题:model->match()找不到子项,wtf?!

这是一个例子:

alt text http://www.freeimagehosting.net/uploads/179eee87e3.png

从图中可以看出,我正在尝试Layouts使用以下代码扩展子项:

void Dialog::restoreState(void)
{
    // get list
    QSettings settings("settings.ini", QSettings::IniFormat);
    settings.beginGroup("MainWindow");
    QStringList List = settings.value("ExpandedItems").toStringList();
    settings.endGroup();

    foreach (QString item, List)
    {
        if (item.contains('|'))
            item = item.split('|').last();
        // search `item` text in model
        QModelIndexList Items = model->match(model->index(0, 0), Qt::DisplayRole, QVariant::fromValue(item));
        if (!Items.isEmpty())
        {
            // Information: with this code, expands ONLY first level in QTreeView
            view->setExpanded(Items.first(), true);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

settings.ini文件包含:

[MainWindow] …
Run Code Online (Sandbox Code Playgroud)

qt qt4 qabstractitemmodel

13
推荐指数
1
解决办法
2万
查看次数

如何实现QML ListModel,就像QAbstractListModel派生模型的get方法一样

我想在QML中使用QAbstractListModel派生模型.将模型绑定到视图已经很有效.

我想要实现的下一件事是能够访问特定项目及其角色,就像使用QML ListModel一样

grid.model.get(index).DisplayRole
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何在我的QAbstractListModel派生模型中实现这个get方法.

任何提示?

qt qabstractitemmodel qml qt-quick qtquick2

11
推荐指数
2
解决办法
2万
查看次数

如何使用QCombobox模型

我想用 QCombobox 作为该ComboboxSwingJava.所以我需要 Model用来握住我的物体.我如何在QCombobox中保存我的对象.(我认为我应该在模型中保存数据,因为它QCombobox是根据MVC模式设计的......)任何帮助都将受到赞赏.

c++ qt qt4 qcombobox qabstractitemmodel

8
推荐指数
2
解决办法
1万
查看次数

PyQt4强制从QAbstractItemModel查看fetchMore

我有一个QTableView,可以动态加载来自继承QAbstractItemModel的自定义模型的数据.该模型实现了fetchMore和canFetchMore.

问题是我希望能够为小数据集选择所有行,但如果我在视图中点击ctrl-a,它只会选择当前加载的行.

是否有某种机制强制QTableView获取更多行?理想情况下,我想显示一个进度条,指示从模型加载的数据部分.每隔几秒钟我就想强制模型加载更多的数据,但我仍然希望让用户与目前已加载的数据进行交互.这样,当进度条完成时,用户可以按ctrl-a并确信所有数据都已被选中.


编辑:我有另一个激励用例.我想跳转到特定的行,但如果没有加载该行,我的界面什么都不做.

如何强制QAbstractItemModel获取更多(或特定行),然后强制QTableView显示它?

如果我没有实现fetchMore和canFetchMore,之前的功能可以正常工作,但加载表格非常慢.当我实现这些方法时,情况正好相反.没有这个问题的答案导致我的qt界面的可用性问题,所以我正在为这个问题打开奖金.

这是我用来选择特定行的方法.

def select_row_from_id(view, _id, scroll=False, collapse=True):
    """
        _id is from the iders function (i.e. an ibeis rowid)
        selects the row in that view if it exists
    """
    with ut.Timer('[api_item_view] select_row_from_id(id=%r, scroll=%r, collapse=%r)' %
                  (_id, scroll, collapse)):
        qtindex, row = view.get_row_and_qtindex_from_id(_id)
        if row is not None:
            if isinstance(view, QtWidgets.QTreeView):
                if collapse:
                    view.collapseAll()
                select_model = view.selectionModel()
                select_flag = QtCore.QItemSelectionModel.ClearAndSelect
                #select_flag = QtCore.QItemSelectionModel.Select
                #select_flag = QtCore.QItemSelectionModel.NoUpdate
                with ut.Timer('[api_item_view] selecting name. qtindex=%r' % (qtindex,)):
                    select_model.select(qtindex, select_flag)
                with ut.Timer('[api_item_view] …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt qtableview qabstractitemmodel

8
推荐指数
1
解决办法
867
查看次数

QTreeWidgetItem中的角色是什么?

我有QTreeWidget几个列,我添加QTreeWidgetItems它.我尝试让第二列包含每个数值,Item以便我可以按此值对项目进行排序

QTreeWidgetItem has a method called setData(int column, int role, QVariant(data))
Run Code Online (Sandbox Code Playgroud)

我找不到关于这个role论点是什么的任何文档.我所知道的是,如果我将其设置为1或2,列中会显示某些内容,如果我将其设置为0或> = 3,则列中不显示任何内容,无论数字总是按字母顺序排序,这是错的.

model-view-controller qt pyqt qabstractitemmodel

7
推荐指数
2
解决办法
1万
查看次数

pyqt:尝试理解QAbstractDataModel和QTreeView的插入

我使用PyQt使用QAbstractItemModel管理树视图.到目前为止,我已成功实现它,以便我可以加载数据,展开和折叠它,以及编辑值.

然而,我无法做的一件事是围绕插入和移除行.

我想做的简短版本:

当用户编辑特定单元格时,我需要实际删除对象层次结构中的基础项目并将其替换为另一个项目.我在我的模型的setData方法中实现它.因为我不完全理解我在做什么,所以我似乎已经将它设置为段错误.

基本上,我只需要更好地理解数据模型如何与QModelIndex交互,但阅读和重新阅读文档似乎并没有启发我.任何帮助(或指向一个体面的教程的任何链接 - 最好,但不一定,在python中 - 也将非常感激).

以下是我正在使用的代码示例:

#---------------------------------------------------------------------------
def setData(self, index, value, role=QtCore.Qt.EditRole):
    """
    Sets the data. 
    """
    if index.isValid() and (0 <= index.row() < self.rowCount()):

        item = index.internalPointer()
        value = value.toString()
        if index.column() == 5:
            # rip out the current object and replace it with a new one of 
            # the correct datatype.

            #next 4 lines get info from my underlying hierarchy of objects
            dataType = str(value)
            parent = item.get_parent()
            name = item.get_name()
            row = parent.get_row_of_child(name) …
Run Code Online (Sandbox Code Playgroud)

qt insert pyqt qabstractitemmodel

7
推荐指数
1
解决办法
4612
查看次数

QAbstractItemModel和QTreeView

我需要在QtreeView中显示自己的数据模型的工作示例(c ++).

c++ qt qtreeview qabstractitemmodel

7
推荐指数
1
解决办法
2万
查看次数

绝不会调用QAbstractItemModel data()

我正在尝试创建一个QTreeView并使用自定义模型.我把qDebug()报表在不同的地方,我已经确定,data()永远不会被调用.我该如何解决这个问题?

该模型的代码如下

#include "ModelItemNeural.h"

ModelItemNeural::ModelItemNeural(QObject *parent, NeuralNode *rootNode)
    : QAbstractItemModel(parent)
{
    this->rootNode = 0;
}

QModelIndex ModelItemNeural::index(int row, int column, const QModelIndex &parent) const
{
    // Out of bounds and null rootNode check.
    if (rootNode == 0 || row < 0 || column < 0)
    {
        return QModelIndex();
    }

    NeuralNode* parentNode = nodeFromIndex(parent);
    NeuralNode* childNode = parentNode->getInputs().value(row);

    if (childNode == 0)
    {
        return QModelIndex();
    }

    return createIndex(row, column, childNode);
}

QModelIndex ModelItemNeural::parent(const QModelIndex &child) …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtreeview qabstractitemmodel

7
推荐指数
1
解决办法
4940
查看次数

带有键盘数百万项的QListView

我正在使用一个QListView源自的自定义模型QAbstractItemModel.我有数百万件物品.我打电话listView->setUniformItemSizes(true)来阻止在向模型添加项目时调用一堆布局逻辑.到目前为止,一切都按预期工作.

问题是使用键盘导航列表很慢.如果我在列表中选择一个项目,然后按向上/向下,选择将快速移动,直到选择需要滚动列表.然后变得非常迟钝.按向上翻页或向下翻页也非常滞后.问题似乎是当使用键盘选择项目(也就是"当前项目")时,列表也会向上/向下滚动.

如果我使用鼠标,导航列表很快.我可以使用快速的鼠标滚轮.我可以按照我想要的速度向上/向下拖动滚动条 - 从列表顶部到底部 - 列表视图快速更新.

关于为什么改变选择和滚动列表的组合如此缓慢的任何想法?有可行的解决方案吗?

2015年9月9日更新

为了更好地说明问题,我在此更新中提供了放大信息.

KEYBOARD + SCROLLING的性能问题

这主要是性能问题,尽管它确实与用户体验(UX)有关.看看当我使用键盘滚动浏览时会发生什么QListView:

慢滚动问题

注意底部附近的减速?这是我的问题的焦点.让我解释一下我如何浏览列表.

说明:

  1. 从顶部开始,选择列表中的第一个项目.
  2. 按下并保持向下箭头键,当前项(选择)更改到下一个项目.
  3. 对于当前查看的所有项目,快速更改选择.
  4. 一旦列表需要将下一个项目放入视图中,选择速率就会显着降低.

我希望列表能够像键盘的打字速度一样快地滚动 - 换句话说,选择下一个项目所花费的时间不应该在滚动列表时减慢.

使用MOUSE快速滚动

这是我使用鼠标时的样子:

快速鼠标导航

说明:

  1. 使用鼠标,我选择滚动条手柄.
  2. 快速向上和向下拖动滚动条手柄,相应地滚动列表.
  3. 所有动作都非常快.
  4. 请注意,没有选择.

这证明了两个要点:

  1. 模型不是问题.如您所见,该模型在性能方面没有任何问题.它可以比显示元素更快地传递元素.

  2. 选择和滚动时性能会降低.选择和滚动的"完美风暴"(如使用键盘在列表中导航所示)导致减速.因此,我推测,在滚动期间正常执行的选择时,Qt以某种方式进行了大量处理.

非Qt实施是快速的

我想指出,我的问题似乎与Qt有关.

在使用不同的框架之前,我已经实现了这种类型的东西.我想做的是在模型 - 视图理论的范围内.我可以使用带有juce :: ListBox的juce :: ListBoxModel以极快的速度完成我所描述的内容.这是愚蠢的快速(此外,当每个项目已经具有唯一索引时,不需要为每个项目创建重复索引,例如a ).我认为Qt需要针对其模型 - 视图架构的每个项目,虽然我不喜欢开销成本,但我认为我理性,我可以忍受它.无论哪种方式,我都不怀疑这些因素导致我的表现减慢.QModelIndexQModelIndexQModelIndex

通过JUCE实现,我甚至可以使用向上翻页和向下翻页键来导航列表,它只是在列表中闪现.使用Qt QListView实现,即使使用发布版本,它也会突然出现并且很迟钝.

使用JUCE框架的 …

c++ qt qlistview qabstractitemmodel model-view

7
推荐指数
1
解决办法
2100
查看次数

QML 列表视图/C++ 列表模型中的大量数据

在我的项目中,我需要使用 QML 列表视图来显示一些数据的列表。而且,我使用的 QT 版本是 QT 5.0.2。由于在这个版本的 Qt 中没有滚动条视图,我设法按照这个例子来实现它。

现在,数据源是另一个组件,它提供了 C++ API 来请求数据范围。并且数据集中的元素数量可能很大(以数万计)。

我已按照以下步骤实现我的要求:

  1. 我创建了一个继承自 QAbstractListModel 的 C++ 类,并且覆盖了 rowCount、data、canfetchmore 和 fetch more 函数。
  2. 在 QML 中,我将 C++ 实例称为模型。
  3. 每当调用 fetchmore() 函数时,我都会使用由另一个组件提供的 C++ API 请求下一组数据,并将相同的数据附加到我的列表模型中。

到目前为止,还不错。但我需要澄清几点——

  1. 如果我继续将数据附加到我的列表模型,那么我最终会在列表中存储数千个元素(我不想这样做)。我想限制列表中的元素数量并将其用作环形缓冲区。这可能吗?
  2. fetchmore 中的 QModelIndex 参数作为无效索引接收。为什么?
  3. 假设一个案例:滚动条上提到了字母,当用户在滚动条上选择 Y 时,我应该获取以 Y 开头的元素。在这里,我可以从我的外部组件获取数据并使用新数据重置列表模型。但是,如果我这样做,那么我的列表将从 Y 元素开始,我将无法向上滚动以获取以前的元素。-- 还有其他方法可以实现吗?
  4. 此外,如果我询问大量数据(例如在第 3 点中提到的情况),我的其他组件需要相当长的时间 - 有什么建议可以做出更好的设计来处理这种情况吗?
  5. 除了 fetchmore() 之外,还有什么方法可以动态更新模型。

我在谷歌上花了很多时间来回答我的问题,但我成功地失败了。:(

任何帮助表示赞赏。提前致谢。

qabstractitemmodel qml qabstractlistmodel

6
推荐指数
0
解决办法
1136
查看次数