我想使用自定義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
派生類不能註冊,因爲它不能被複制。)
庫巴 - 這是一個事*建議*我可能是在我的代碼在其他地方做。告訴我我*必須做的事情是另一回事。我相當明確地告訴你,我更新了我的問題,以確認我在這個實例上沒有明確地調用信號/插槽連接。此外,這是一個*編譯時*錯誤 - 我如何在調試器中逐句通過代碼? –