- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用自定义 QSortFilterProxyModel
.
这是我的标题:
#include <QSortFilterProxyModel>
class QSortFilterProxyModel_NumbersLast : public QSortFilterProxyModel
{
Q_OBJECT
public:
QSortFilterProxyModel_NumbersLast(QObject * parent = nullptr);
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
};
这是源文件中的构造函数:
QSortFilterProxyModel_NumbersLast::QSortFilterProxyModel_NumbersLast(QObject * parent)
: QSortFilterProxyModel(parent)
{
}
(此外,我有适当的 - 我认为 - 称为 Q_DECLARE_METATYPE(QSortFilterProxyModel_NumbersLast)
和 qRegisterMetaType<QSortFilterProxyModel_NumbersLast>("QSortFilterProxyModel_NumbersLast");
。)
不幸的是,我从编译器收到以下错误:
error C2248: 'QSortFilterProxyModel::QSortFilterProxyModel' : cannot access private member declared in class 'QSortFilterProxyModel'
...我确实注意到基类的构造函数QSortFilterProxyModel::QSortFilterProxyModel
, 声明为 public
:
// (From *qsortfilterproxymodel.h*, in the Qt core)
public:
explicit QSortFilterProxyModel(QObject *parent = 0);
我的问题:为什么我收到错误 'QSortFilterProxyModel::QSortFilterProxyModel' : cannot access private member
?我该怎么做才能解决这个问题?
注意:
来自其他问题,例如this , this , 和 this ,我看到我可能会在某处复制 - 这对于 QObject
是不允许的
然而,我的唯一用途QSortFilterProxyModel_NumbersLast
是以下内容:
QStandardItemModel * model = new QStandardItemModel(ui->listView_dmu_members);
QSortFilterProxyModel_NumbersLast *proxyModel = new QSortFilterProxyModel_NumbersLast(ui->listView_dmu_members);
proxyModel->setSourceModel(model);
ui->listView_dmu_members->setModel(model);
...我认为这不会触发复制。
注2:
根据@KubaOber 的评论:
我已经删除 Q_DECLARE_METATYPE(QSortFilterProxyModel_NumbersLast)
和 qRegisterMetaType<QSortFilterProxyModel_NumbersLast>("QSortFilterProxyModel_NumbersLast");
登记。我现在收到的错误是:
Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system
我不相信我在复制 QSortFilterProxyModel_NumbersLast
实例。因此,我不明白为什么会触发此错误。
(请注意,最初,我没有注册QSortFilterProxyModel_NumbersLast
类。只是由于上述错误,我注册了该类。然而,回想起来,我很清楚, QObject
- 派生类无法注册,因为无法复制。)
最佳答案
Q_DECLARE_METATYPE
需要访问复制构造函数,并且该构造函数在所有 QObject 派生类中被删除 (C++11) 或不可访问 (C++98) .那是编译器提示的构造函数。解决方法是不声明代理过滤器模型元类型。
以下内容适用于 Qt 4.5.8 和 5.2.1,适用于主要桌面平台。
#include <QApplication>
#include <QSortFilterProxyModel>
#include <QListView>
#include <QStandardItemModel>
class QSortFilterProxyModel_NumbersLast : public QSortFilterProxyModel
{
Q_OBJECT
public:
QSortFilterProxyModel_NumbersLast(QObject * parent = nullptr) :
QSortFilterProxyModel(parent) {}
bool lessThan(const QModelIndex &, const QModelIndex &) const {
return false;
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QStandardItemModel * model = new QStandardItemModel(&app);
QSortFilterProxyModel_NumbersLast *proxyModel = new QSortFilterProxyModel_NumbersLast(&app);
proxyModel->setSourceModel(model);
QListView view;
view.setModel(model);
view.show();
model->appendRow(new QStandardItem("Foo"));
model->appendRow(new QStandardItem("Bar"));
model->appendRow(new QStandardItem("Baz"));
return app.exec();
}
#include "main.moc"
在 Qt 5 中,您看到的错误消息来自 qMetaTypeId
方法。它是一个静态断言,因此您可能会看到编译时错误。此方法从 qRegisterMetaType
和其他几个地方调用,主要与 QObject
和 QVariant
中的模板化连接方法有关。
关于c++ - 无法从 `QSortFilterProxyModel` 派生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915328/
我想做的:从模型中获取项目并使用排序代理按不同的角色对它们进行排序:预期输出: 实际输出包含不应该存在的空行: 您可以看到空行展开了 ListView,甚至可以通过光标进行选择。 以下是产生此错误行为
我想按日期对表格进行排序。问题是它们被解释为字符串,因此我的本地日期格式排序错误,如 26。九月 大于 16。十一月,因为 26 > 16。 无论如何,我已经建立了自己的模型并像这样尝试: QVari
我现在有点绝望。当插入到 View 中时,我的带有子类 QStirngListModel 的模型类工作得很好。当我在模型和 View 之间插入 qt 的 QSortFilterProxyModel 时
我有一个从 QAbstractListModel 继承而来的模型,它有一个 QList 来维护包含 QDateTime 的数据,该数据用于维护此列表。我必须将此数据维护一个小时,即旧数据将从列表中删除
在我的 FilterProxyModel 中,我想从我的 View 中删除第 2 列和第 5 列。所以我是这样做的 proxy_filter->removeColumns(2,1); proxy_fi
我对 Qt 中的此类对象非常缺乏经验,我需要知道是否有办法在过滤后检索数据(用于对它们执行某些操作,例如导出到另一个文件中)。 情况是这样的,我从数据库获取数据并将其存储在 python 列表中,之后
我有一个 QTableWidget,其中包含来自数据库的数据,我想实时搜索其内容(当我输入字母时,他会显示结果)?欢迎任何帮助。非常感谢。 这是我的代码: class Filter: def
QSortFilterProxyModel 似乎限制了可以在 QTableView 中显示的数据量,但仅限于应用过滤器时。似乎限制是数据大小而不是记录数,因为我可以在此处的示例中放入比我看到该行为的实
我正在使用 QSortFilterProxyModel 来过滤来自 QAbstractListModel 的结果。但是,我想返回原始模型中不存在的第一个条目,也就是说,它在某种程度上是人为的。 这是我
假设我有一个列表变量 datalist 存储 10,000 个字符串实体。QTableView 只需要显示其中的一些实体。这就是为什么 QTableView 被指定为 QSortFilterProxy
我正在尝试实现一个可在多个列上排序的表格。 Qt 的 QSortFilterProxyModel 仅支持对一列进行排序(至少在 Qt 4.6.2 中)。 我找到了 this solution由 git
我有一个 QSortFilterProxyModel 的自定义子类。我用我想要的自定义过滤器覆盖了 filterAcceptsRow。然后我这样使用它: proxy = new MyFilterMod
我正在使用继承 QSortFilterProxyModel 的类来仅对 TableView 中的行进行排序。 我启用了 dynamicSort 以确保即使在我加载模型或添加行时我的 View 也保持排
在我的项目中,我在 TreeView 中显示了一个模型。我使用 QSortFilterProxyModel 根据 Qt::UserRole+1 中设置的 ID 对模型进行排序。这将我的列表按“类型”划
我有一个包含 QTreeView 的应用程序其底层模型,比如 MyModel源自 QStandardItemModel .为了从 View 中过滤掉MyModel的一些项目, 我把它插到 QSortF
我有简单的模型 View TreeView ,带有 QSortFilterProxyModel 代理来对列进行排序,并使用 QStandardItemModel 作为模型 在每列中都有字符串排序良好,
我们有一个QSortFilterProxyModel安装在 QTableView和两个(或更多)QLineEdit用于过滤 View (基于这些 QLineEdit 的文本) 在我们看来,我们有一个槽
我有一个QDirModel,其当前目录已设置。然后我有一个 QListView ,它应该显示该目录中的文件。这工作得很好。 现在我想限制显示的文件,因此它只显示 png 文件(文件名以 .png 结尾
我有一个使用 QSortFilterProxyModel 创建表小部件的类。该类将采用字典列表作为数据,然后使用字典的键值填充表列和行。将表设置为按浮点值排序时,表中的多个字段将变得不可见。但是,当我
我正在使用 qsortfilterproxymodel 从 QstandardModel 过滤数据。我能够在我的测试应用程序中实现这个过滤过程,但是当我实时[集成]使用它时,它似乎没有按预期工作。 [
我是一名优秀的程序员,十分优秀!