Russian Qt Forum

Qt => Вопросы новичков => Тема начата: xintrea от Ноябрь 22, 2017, 20:31



Название: Дважды вызывается слот: это шо за?
Отправлено: xintrea от Ноябрь 22, 2017, 20:31
Решил тут после долгого перерыва поковыряться с Qt. Поставил Qt 5.9.2, QtCreator 4.4.1. И решил сделать проект с формами, генерируемыми в Designer. Раньше писал код вообще вручную, используя только программную генерацию форм.

Сделал две формы: первая - MainWindows, вторая - SettingsWindow. На первой есть кнопка settingsButton, при ее нажатии должна открываться вторая форма. Элементарно.

Но оказалось, что при нажатии кнопки, слот, законнекченный с сигналом clicked() этой кнопки, вызывается два раза!

Я даже сделал такой код в слоте:

Код
C++ (Qt)
void MainWindow::on_settingsButton_clicked()
{
   static int counter=1;
   qDebug() << "Click to settings button" << counter;
 
   counter++;
}

И при одном клике вижу в консоли две строчки:

Код:
Click to settings button 1
Click to settings button 2

Я перепроверил ui-файл в XML-виде, думал может там какой-то двойной коннект прописан, а дезигнер его не отображает? Нет, один коннект.

Тогда почему слот два раза дергается?

Минимальный проект прикреплен.


Название: Re: Дважды вызывается слот: это шо за?
Отправлено: Old от Ноябрь 22, 2017, 20:35
Это потому, что вы связали сигнал и слот в дизайнере. Срабатывает эта связь + автоконнект по имени слота.


Название: Re: Дважды вызывается слот: это шо за?
Отправлено: xintrea от Ноябрь 22, 2017, 20:39
Обожечки, автоконнект по имени. Совсем забыл про это.


Название: Re: Дважды вызывается слот: это шо за?
Отправлено: xintrea от Ноябрь 22, 2017, 20:50
Это потому, что вы связали сигнал и слот в дизайнере. Срабатывает эта связь + автоконнект по имени слота.

Но дело в том, что слот я тоже в дизайнере сделал. Сначала сделал слот путем выделения кнопки settingsButton потом ПКМ "Перейти к слоту". Потому что пока его не создашь, в таблице редактора сигналов и слотов его невозможно выбрать. Но и после такого создания, слота не видно.

Приходится перейти в режим "изменение сигналов/слотов" (хитрая кнопка сверху), выбрать кнопку settingsButton, потянуть, отпустить на форме, и тогда появится еще одна таблица сигналов-слотов, и там уже можно вручную добавить созданный слот. После чего он начинает видеться в таблице редактора сигналов и слотов.

Вопрос: а как правильно создавать слот?

Да, это очень нехорошо, что коннект-по-имени не виден в дизайнере...


Название: Re: Дважды вызывается слот: это шо за?
Отправлено: Old от Ноябрь 22, 2017, 20:58
Вопрос: а как правильно создавать слот?
Не давать ему странных имен, что-бы не было автоконнекта. :)


Название: Re: Дважды вызывается слот: это шо за?
Отправлено: zhbr от Ноябрь 23, 2017, 06:53

Сначала сделал слот путем выделения кнопки settingsButton потом ПКМ "Перейти к слоту".

после этого выбрать нужный сигнал и больше делать ничего не надо.