Название: QRadioButton - вызов функции Отправлено: defint от Февраль 19, 2011, 20:36 у меня есть функция setLoc(bool) и 2 радиобутона.
как вызвать функцию setLoc(bool) по изменению радиобутона? думал как-то так: Код: QObject::connect(rb1,SIGNAL(toggled(bool)),window,SLOT(setLoc(bool)); но непойму что должно быть на месте const char *member. Название: Re: QRadioButton - вызов функции Отправлено: Karl-Philipp от Февраль 19, 2011, 22:00 у меня есть функция setLoc(bool) и 2 радиобутона. 1) что такое "const char *member"?как вызвать функцию setLoc(bool) по изменению радиобутона? думал как-то так: Код: QObject::connect(rb1,SIGNAL(toggled(bool)),window,SLOT(setLoc(bool)); но непойму что должно быть на месте const char *member. 2) setLoc(bool) объявлен как функция или как слот? Название: Re: QRadioButton - вызов функции Отправлено: defint от Февраль 20, 2011, 00:06 member => 3 аргумент у конекта.
объявлена как функция. если же убрать SLOT() он вообще не будет компилировать. Название: Re: QRadioButton - вызов функции Отправлено: Karl-Philipp от Февраль 20, 2011, 00:34 member => 3 аргумент у конекта. 1) третий аргумент - экземпляр класса, после которого следует слот (объявленный в этом классе) ;объявлена как функция. если же убрать SLOT() он вообще не будет компилировать. 2) срочно объявляй setLoc() в разделе со слотами! Название: Re: QRadioButton - вызов функции Отправлено: serg_hd от Февраль 20, 2011, 01:08 Код
Название: Re: QRadioButton - вызов функции Отправлено: defint от Февраль 20, 2011, 14:30 всё равно не пойму где объявлять приват слот. создать для него свой класс? до этого у меня нет объявленых классов.
вот как я делаю: Код
Название: Re: QRadioButton - вызов функции Отправлено: serg_hd от Февраль 20, 2011, 17:36 Интерфейс от прочего обычно отделяется. Сделай свой MyClass наследником от QWidget. Создай дополнительный gui-класс, с названием, например, Ui_MyClass, в который ты передашь указатель на сам MyClass. Чтоб Ui_MyClass автоматически почистился при удалении MyClass унаследуй его от QObject (если не хочешь чистить ui в деструкторе MyClass'a). Слот необязательно должен быть в секции private, это по обстоятельствам. Макрос Q_OBJECT в каждом своём классе объявлять тоже необязательно, но в любом случае нужен, когда в классе используются сигнал-слот связи, tr() и т.п. Примерный код (не проверял, но идея должна быть ясна):
MyClass.h Код
MyClass.cpp Код
Ui_MyClass.h (гуй на .h/.cpp обычно не разделяется): Код
main.cpp Код
Конечно можно ещё отметить, что главный класс, в твоём случае это MyClass, желательно организовывать как singleton, но до этого ещё успеешь дойти. И ещё правильно понимай когда надо передавать в виджет парента, а когда не надо. Если виджет создан в куче (через new), и при этом ему передан parent, то это гарантия его зачистки при удалении parent'a. Это относится только к Qt (у них своеобразная реализация garbage collector'a за счёт фиксирования каждого потомка в QObjectList'e предка), в самописных классах на каждый new приходился бы свой delete. В данном случае для лайаута родителя передавать не надо, т.к. он ему будет назначен методом setLayout. Поскольку другие виджеты получили родителя методом addWidget() лайаута, то при их создании указывать парента не обязательно, а вот для QButtonGroup - надо. Название: Re: QRadioButton - вызов функции Отправлено: defint от Февраль 20, 2011, 18:46 хм. а ещё говорят что МФЦ тяжелее.
спасибо за ответ, пойду разбираться. хоть из написанного понял только половину. Название: Re: QRadioButton - вызов функции Отправлено: serg_hd от Февраль 20, 2011, 18:57 Это с первого взгляда так кажется, на самом деле ничего сложного, особенно касаемо гуя. Создавай виджеты на стеке (без new) - как члены класса - может быть так легче будет.
|