LINUX.ORG.RU

[Qt][С++] Как вызвать protected метод в экземпляре класса?

 ,


0

0

Есть QWizard, созданный в дизайнере. Необходимо сделать некоторые поля в его страницах обязательными для заполнения. Но метод QWizardPage::registerField(), который это делает - protected. В хидере ui-файла страница, на которой нужные поля, создается так:

QWIzardPage *cfdefinition;

Инициализируется в функции setupUi:

cfdefinition = new QWizardPage();

При попытке написать что-нибудь вроде переопределения виртуальной функции QWizardPage для этого экземпляра

cfdefinition::initializePage() { this->registerField("name*",m_ui->lname); }

Ругается, что cfdefinition не является именем класса. Может быть, нужно эту функцию где-нибудь в другом месте переопределить(сейчас пытался в хидере родительского класса - QWizard`a)? Или единственный возможный метод - отдельно проектировать каждую страницу, а потом их в присоединять не в дизайнере, а кодом? Правда, так слишком много придется переделывать

★★★★

это вам не скриптовые языки с открытыми классами ;)

> Или единственный возможный метод - отдельно проектировать каждую страницу,

да. или одну универсальную страницу, но всё равно свою, унаследовав от QWizardPage.

> а потом их в присоединять не в дизайнере, а кодом?

зачем кодом? можно и дизайнером.

arsi ★★★★★
()

> QWIzardPage *cfdefinition;

> cfdefinition::initializePage() { this->registerField("name*",m_ui->lname); }


> Ругается, что cfdefinition не является именем класса.


cfdefinition действительно не является именем класса. Это указатель на объект класса QWIzardPage.

xintrea
()
Ответ на: комментарий от arsi

открыл для себя строку контекстного меню "promote to" - оказывается, виджеты можно наследовать от собственных классов:) Правда, QtCreator после обновления ubuntu до кармической коалы постоянно виснет(ставил на старую систему не из репов), сейчас новый накачу и проверю

wingear ★★★★
() автор топика
Ответ на: комментарий от Reset

собралось, правда все равно поле не выделяется как обязательное. Видимо,в qmake все-таки встроена защита от дурака)

wingear ★★★★
() автор топика
Ответ на: комментарий от wingear

>собралось, правда все равно поле не выделяется как обязательное.

Ой-ёёё =) Делать "#define protected public" конечно не надо, protected-секции появляются неспроста, можно как раз порушить всю налаженную систему. Да и в остальном тексте такая замена может привести к сюрпризам.

Короче, вот ссылка для примера: http://doc.trolltech.com/4.5/qwizard.html#mandatory-fields Версия QT у тебя какая, кстати? В общем просто не знаю, что там может не работать, если не сможешь повторить пример, свой код давай (не весь, а имеющую отношение к делу часть).

>Видимо,в qmake все-таки встроена защита от дурака)

qmake ничего такого не умеет, это просто система сборки.

Как говорится, no offence, но я бы рекомендовал поизучать C++ отдельно от QT первое время, да и от ОС тоже. Никакая IDE с автодополнением понимания в голове не даст. Я к тому, что это разные базисы, разные наборы концепций. Ты явно что-то торопишься сделать методом кувалды, а с языком C++ это добром не кончится. С QT -- тем более. :) Плохо осваивать сразу всё в одной куче.

nuffsaid
()
Ответ на: комментарий от nuffsaid

благодарю. Ссылка не открылась,т.к. нормальный интернет сейчас не работает,а с мобильного доступны только гугол и л.о.р.-) Унаследовал класс от QWizardPage, переопределил метод как public, a потом - promote to и все заработало. Да,я не знаю с++, да и С не особо(только 1 глава Кернигана),но это не для себя,а хоздоговорные работы,в которые неожиданно перешел диплом. Хочется освоить С, vim и openGL, но /me клинический слоупок. Да и вообще не туда поступил

wingear ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.