Я пытаюсь использовать пользовательский 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:
Per @ KubaOber Замечаний:
У меня есть удаленыQ_DECLARE_METATYPE(QSortFilterProxyModel_NumbersLast)
и qRegisterMetaType<QSortFilterProxyModel_NumbersLast>("QSortFilterProxyModel_NumbersLast");
регистрации. Ошибка Теперь я получаю это:
Тип не зарегистрирован, пожалуйста, используйте Q_DECLARE_METATYPE макрос возвестит мета-объектной системы в Qt
Я не верю, что я копирую экземпляр QSortFilterProxyModel_NumbersLast
, Поэтому я не понимаю, почему эта ошибка будет вызвана.
(Обратите внимание, что изначально у меня был нет зарегистрирован класс QSortFilterProxyModel_NumbersLast
. Только из-за вышеуказанной ошибки я зарегистрировал класс.Я ясно, однако, в ретроспективе, что QObject
-derived класс не может быть зарегистрирован, поскольку он не может быть скопирован.)
Куба - это одно, что можно предложить *, что я мог бы делать в другом месте моего кода. Другое дело, сказать мне, что я должен сделать. Я прямо сказал вам, что обновил свой вопрос, чтобы подтвердить, что я * не * явно вызывал соединение с сигналом/слотом в этом экземпляре. Кроме того, это ошибка * compile-time * - как мне пройти код в отладчике? –