Russian Qt Forum

Qt => Вопросы новичков => Тема начата: xintrea от Февраль 03, 2016, 11:07



Название: Как указать слот в дизайнере?
Отправлено: xintrea от Февраль 03, 2016, 11:07
Решил начать разбираться с дизайнером. Сделал через мастер оконное приложение с главным виджетом MainWindow. Сделал на нем кнопку viewBufferButton. Выделил эту кнопку и в контекстном меню нажал на "Перейти к слоту" -> clicked().

В результате в классе MainWindow появился метод:

Код:
void MainWindow::on_viewBufferButton_clicked()
{

}

Полез настраивать связку сигналов и слотов в "Редактор сигналов и слотов". Выбираю

Отправитель: viewBufferButton
Сигнал: clicked()
Получатель: MainWindow
Слот: а вот слот on_viewBufferButton_clicked() выбрать невозможно.

Почему так? Он должен и так срабатывать, потому что начинается на "on_", или необходимо еще какие-то действия сделать чтобы в дизайнере увиделся этот слот?


Название: Re: Как указать слот в дизайнере?
Отправлено: GreatSnake от Февраль 03, 2016, 11:24
Виджеты и диалоги с автосоединением (http://www.doc.crossplatform.ru/qt/4.7.x/designer-using-a-ui-file.html#widgets-and-dialogs-with-auto-connect).


Название: Re: Как указать слот в дизайнере?
Отправлено: Bepec от Февраль 03, 2016, 12:43
Он соединяется автоматом, ища on_ИмяВиджета_сигналВиджета(аргументы).
И его соответственно не будет в дизайнере, ибо дизайнер вообще не в курсе что там у вас в коде :)


Название: Re: Как указать слот в дизайнере?
Отправлено: kambala от Февраль 03, 2016, 14:53
если используешь 11-й стандарт, то проще коннектить к лямбдам в коде (писанины меньше, да и выдумывать имена методам не надо)


Название: Re: Как указать слот в дизайнере?
Отправлено: Bepec от Февраль 03, 2016, 15:13
Лямбды эт хорошо, ускоряет написание кода, но вот читаемость становится в разы хуже :)


Название: Re: Как указать слот в дизайнере?
Отправлено: GreatSnake от Февраль 03, 2016, 15:38
Зато количество бонусов нивелирует этот сомнительный недостаток.


Название: Re: Как указать слот в дизайнере?
Отправлено: __Heaven__ от Февраль 03, 2016, 15:42
kambala, можете привести пример, пожалуйста?


Название: Re: Как указать слот в дизайнере?
Отправлено: kambala от Февраль 03, 2016, 15:45
простейший пример из проекта:
Код
C++ (Qt)
connect(ui->actionAbout, &QAction::triggered, [this]{
   QMessageBox::about(this, tr("About"), tr("about text"));
});

тут чуть похитрее примеры: https://github.com/kambala-decapitator/HornAppDesktop/blob/master/widget.cpp


Название: Re: Как указать слот в дизайнере?
Отправлено: GreatSnake от Февраль 03, 2016, 15:49
Для нашего случая
Код
C++ (Qt)
if( auto pb = findChild< QPushButton* >( "viewBufferButton" ) )
   connect( pb, &QPushButton::clicked, [ this, pb ] {
             ...
        } );
 


Название: Re: Как указать слот в дизайнере?
Отправлено: kambala от Февраль 03, 2016, 16:01
^ а зачем это городить, если есть ui->viewBufferButton?


Название: Re: Как указать слот в дизайнере?
Отправлено: Igors от Февраль 03, 2016, 16:04
К слову, такую расстановку пробелов
Цитировать
if( value )
видел еще в 90-х. Из какой книжки этот пижонский стиль? (наверное что-то типа "идеальный код"). У каких больших авторитетов это переняли?  :)


Название: Re: Как указать слот в дизайнере?
Отправлено: __Heaven__ от Февраль 03, 2016, 16:09
^ а зачем это городить, если есть ui->viewBufferButton?
+1


Название: Re: Как указать слот в дизайнере?
Отправлено: Old от Февраль 03, 2016, 16:10
У каких больших авторитетов это переняли?  :)
Можно и по холиварить. :)

А что не так? Я так пишу и никакого дискомфорта не испытываю. В отличие от сливающегося в кашу:
Код
C++ (Qt)
if(value)
 


Название: Re: Как указать слот в дизайнере?
Отправлено: __Heaven__ от Февраль 03, 2016, 16:22
О-о-о-о!! А я пишу
Код
C++ (Qt)
if (value)
  :D


Название: Re: Как указать слот в дизайнере?
Отправлено: Old от Февраль 03, 2016, 16:23
О-о-о-о!! А я пишу
И у какого пижона вы это подсмотрели? ;)


Название: Re: Как указать слот в дизайнере?
Отправлено: __Heaven__ от Февраль 03, 2016, 16:25
xintrea, можно на пустом месте формы ткнуть правой кнопкой и выбрать сигналы и слоты. Там добавлять свои, что в хидере упоминаются. Но у всего этого есть минус, из-за которого я этим не пользуюсь. Если переименовать слот, то приходится вновь лезть в ui файл и там его тоже переименовывать. Поэтому все коннекты делаю в отдельном методе (или методах) и вызываю из конструктора.


Название: Re: Как указать слот в дизайнере?
Отправлено: __Heaven__ от Февраль 03, 2016, 16:26
И у какого пижона вы это подсмотрели? ;)
Мне кажется, что этот пижон был я сам  ;D


Название: Re: Как указать слот в дизайнере?
Отправлено: GreatSnake от Февраль 03, 2016, 16:35
^ а зачем это городить, если есть ui->viewBufferButton?
Если есть, то и не нужно, конечно.
Я то сам пользуюсь только динамическими формами, поэтому и вставил поиск.

К слову, такую расстановку пробелов
Цитировать
if( value )
видел еще в 90-х. Из какой книжки этот пижонский стиль? (наверное что-то типа "идеальный код"). У каких больших авторитетов это переняли?  :)
Когда-то давно рабочий проект достался по наследству. У предыдущих авторов был такой стиль.
Как-то подсел на него. Имхо, читабельность у него самая лучшая, хотя по-началу мне тоже не нравилась.
И почему пижонский?


Название: Re: Как указать слот в дизайнере?
Отправлено: Racheengel от Февраль 03, 2016, 17:36
имхо, if (value) ... читается лучше всего.

А когда везде налеплено пробелов (или когда их совсем нет) - то в глазах рябит.


Название: Re: Как указать слот в дизайнере?
Отправлено: GreatSnake от Февраль 03, 2016, 17:38
"имхо" это такая штука...
своя она у каждого ;)


Название: Re: Как указать слот в дизайнере?
Отправлено: Bepec от Февраль 03, 2016, 18:21
Каждый запоминает свой шаблон операторов.
У кого то if(condition) или if (condition) и при просмотре кода, глаз цепляется именно за эти шаблоны.

Хотя я предпочитаю if с пробелом.


Название: Re: Как указать слот в дизайнере?
Отправлено: __Heaven__ от Февраль 03, 2016, 19:06
Продолжая оффтоп.. Вообще я все читаю без проблем. Но хочу поделиться "интересной" записью.
Код
C++ (Qt)
if(a&&b==true) {...}
Вот ее не смог прочитать. Минуты 2 потратил, чтобы понять что это за условие


Название: Re: Как указать слот в дизайнере?
Отправлено: GreatSnake от Февраль 03, 2016, 19:09
Дык всё просто  ???
a не равно 0 и b равно true


Название: Re: Как указать слот в дизайнере?
Отправлено: Bepec от Февраль 03, 2016, 19:11
Раз уж оффтоп, кто нить может поделиться программкой для форматирования кода? :D желательно бесплатной :)


Название: Re: Как указать слот в дизайнере?
Отправлено: kambala от Февраль 03, 2016, 19:37
^ uncrustify


Название: Re: Как указать слот в дизайнере?
Отправлено: Racheengel от Февраль 03, 2016, 19:47
Дык всё просто  ???
a не равно 0 и b равно true

Можно было и так записать тогда:

if (a && b) ...


Название: Re: Как указать слот в дизайнере?
Отправлено: Hellraiser от Февраль 03, 2016, 21:05
Раз уж оффтоп, кто нить может поделиться программкой для форматирования кода? :D желательно бесплатной :)
Поставь вижуал студию, версии не ниже 2013, настрой правила форматирования кода, жмем волшебную комбинацию Ctrl K D, наслаждаемся  :)


Название: Re: Как указать слот в дизайнере?
Отправлено: __Heaven__ от Февраль 03, 2016, 21:34
Bepec, никогда не пользовался, но в QtCreator есть плагин Beautifiler. Быть может оно?