Название: Вызов protected метода Отправлено: GraninDm от Сентябрь 03, 2015, 10:00 Добрый день!
Решил я на днях попробовать написать свою модель на основе исходников QSqlTableModel. Скопировал исходники QSqlTableModel, переобозвал QSqlTableModel по своему - EditSqlQueryModel. Подключил core-private Компилирую и получаю такую ошибку C:\Qt\Qt5.4.2\5.4\mingw491_32\include\QtSql\qsqlresult.h:122: ошибка: 'virtual void QSqlResult::detachFromResultSet()' is protected virtual void detachFromResultSet(); ^ Смотрю исходник Код: class Q_SQL_EXPORT QSqlResult Код где вызывается этот метод Код: bool EditSqlQueryModelPrivate::exec(const QString &stmt, bool prepStatement, Что сделать, чтобы скомпилировалось? И еще куча варнингов типа Z:\Coding\qt\EditSqlQueryModel_Test\editsqlquerymodel.cpp:155: предупреждение: 'EditSqlQueryModel::EditSqlQueryModel(QObject*, QSqlDatabase)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes] EditSqlQueryModel::EditSqlQueryModel(QObject *parent, QSqlDatabase db) ^ Как избавиться от этих варнингов? Название: Re: Вызов protected метода Отправлено: Tuxford от Сентябрь 03, 2015, 10:22 Pretected метод можно вызывать или в самом классе или в унаследовано. Такой код как вы привели понятное дело не компилябельный. А вызывается этот метод как таким образом как я писал или ключевою слово friend:
См. код: Код: class Q_SQL_EXPORT QSqlResult Название: Re: Вызов protected метода Отправлено: GraninDm от Сентябрь 03, 2015, 10:28 Я это понимаю.
Но это не мой код. Это исходник Qt. Как же он у них компилируется? Название: Re: Вызов protected метода Отправлено: Igors от Сентябрь 03, 2015, 10:38 Как же он у них компилируется? Вызывается из friend классов. Это должно насторожить, очень может быть что самому его вызывать не следует, это против замысла авторов. Ну а если "вот НАДО - и все!" тогда такой финт Код
Название: Re: Вызов protected метода Отправлено: Tuxford от Сентябрь 03, 2015, 10:40 Я это понимаю. Коню понятно, что это исходник Qt. Я ответил на ваш вопрос почему оно там работает.Но это не мой код. Это исходник Qt. Как же он у них компилируется? Если не знакомы что такое дружественность в С++, вот статья: http://cppstudio.com/post/8423/ Название: Re: Вызов protected метода Отправлено: GraninDm от Сентябрь 03, 2015, 10:43 Правильно...
Вот строка вызова Код: const_cast<QSqlResult *>(query.result())->detachFromResultSet(); detachFromResultSet() вызывается из класса QSqlResult Класс QSqlResult это friend class для QSqlResult Код: class Q_SQL_EXPORT QSqlResult Так, чет я ерунду написал. Пошел пока думать... Все. Прошу прощенья. Дошло. |