Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Qtnewbie от Февраль 04, 2009, 21:28



Название: Двойной вызов слота для сигнала QPushButton::clicked()
Отправлено: Qtnewbie от Февраль 04, 2009, 21:28
Я понимаю что проблема элементарная и детская, но Qt изучаю тока 2-ю неделю и часто спотыкаюсь на простых вещах.
Вот назначил сигналу слот
Код:
connect(pbSetParam,SIGNAL(clicked()),SLOT(on_pbSetParam_clicked()));
В итоге вызов on_pbSetParam_clicked(); происходит 2 раза. Все файлы проекта прошерстил и не нашел ни каких двойственых вызовов. Объясните из-за чего может происходить двойной вызов?
Кнопку размещал с помощью дизайнера, а не руками, но в дизайнере ничего не назначал.


Название: Re: Двойной вызов слота для сигнала QPushButton::clicked()
Отправлено: Rcus от Февраль 04, 2009, 21:45
connectSlotsByName() же
Цитировать
void QMetaObject::connectSlotsByName ( QObject * object )   [static]
Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form:
     void on_<widget name>_<signal name>(<signal parameters>);
Let's assume our object has a child object of type QPushButton with the object name button1. The slot to catch the button's clicked() signal would be:
     void on_button1_clicked();
вызывается автоматически в setupUi :)


Название: Re: Двойной вызов слота для сигнала QPushButton::clicked()
Отправлено: spirit от Февраль 04, 2009, 21:47
при таком обзывании слота происходит авто-коннект.
Цитировать
void QMetaObject::connectSlotsByName ( QObject * object )   [static]
Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form:
     void on_<widget name>_<signal name>(<signal parameters>);
Let's assume our object has a child object of type QPushButton with the object name button1. The slot to catch the button's clicked() signal would be:
     void on_button1_clicked();
See also QObject::setObjectName().
либо же имя слота поменяйте либо же не делаете этот коннект.
ЗЫ. блин, опоздал  ;D


Название: Re: Двойной вызов слота для сигнала QPushButton::clicked()
Отправлено: pastor от Февраль 04, 2009, 21:48
Все очень просто, читаем про Automatic Connections (http://doc.trolltech.com/4.4/designer-using-a-component.html#automatic-connections)


Название: Re: Двойной вызов слота для сигнала QPushButton::clicked()
Отправлено: pastor от Февраль 04, 2009, 21:49
Дааа, пока нашел ссылку, уже 2 поста запостили. Шустрые вы блин ))


Название: Re: Двойной вызов слота для сигнала QPushButton::clicked()
Отправлено: Bojo от Октябрь 07, 2009, 18:13
Я одного не пойму: а можно ли как то отключить такое поведение (Automatic Connections)?


Название: Re: Двойной вызов слота для сигнала QPushButton::clicked()
Отправлено: pastor от Октябрь 07, 2009, 18:18
Я одного не пойму: а можно ли как то отключить такое поведение (Automatic Connections)?

Нет, отключить  нельзя. Просто не именуй слоты в виде on_okButton_clicked