我想使用自定义QSortFilterProxyModel
。不能派生自`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;
};
这里是从源文件的构造:(。另外,我有正确 - 我觉得 - 叫Q_DECLARE_METATYPE(QSortFilterProxyModel_NumbersLast)
和qRegisterMetaType<QSortFilterProxyModel_NumbersLast>("QSortFilterProxyModel_NumbersLast");
)
QSortFilterProxyModel_NumbersLast::QSortFilterProxyModel_NumbersLast(QObject * parent)
: QSortFilterProxyModel(parent)
{
}
不幸的是,我从编译器收到以下错误:
错误C2248: 'QSortFilterProxyModel :: QSortFilterProxyModel':不能 访问私有成员在类的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");
登记。我现在收到的错误是:
类型未注册,请使用Q_DECLARE_METATYPE宏 让他们知道Qt的元对象系统
我不相信我复制QSortFilterProxyModel_NumbersLast
实例。因此,我不明白为什么会引发这个错误。 (请注意,最初,我有而不是注册了QSortFilterProxyModel_NumbersLast
类。这只是由于我注册了类的上述错误。我很清楚,但是,现在回想起来,那一个QObject
派生类不能注册,因为它不能被复制。)
库巴 - 这是一个事*建议*我可能是在我的代码在其他地方做。告诉我我*必须做的事情是另一回事。我相当明确地告诉你,我更新了我的问题,以确认我在这个实例上没有明确地调用信号/插槽连接。此外,这是一个*编译时*错误 - 我如何在调试器中逐句通过代码? –