Russian Qt Forum

Qt => Вопросы новичков => Тема начата: nirraen от Октябрь 01, 2019, 11:19



Название: обработка события в Checkbox
Отправлено: nirraen от Октябрь 01, 2019, 11:19
Здравствуйте, подскажите, пожалуйста.
Пример из Delphi. Есть форма. На ней Checkbox. Если кликнуть два раза, автоматически перебрасывает в редактор кода с заготовленным шаблоном. И можно начать писать код под событие клика по Checkbox.

аналогичная ситуация, но в Qt.
Есть форма. На ней Checkbox. Если пользователь поставит галочку или уберет запустить соответствующий код на исполнение, вопрос куда копать, что читать?


Название: Re: обработка события в Checkbox
Отправлено: kambala от Октябрь 01, 2019, 11:29
правой кнопкой на Checkbox — go to slot — дважды кликнуть на нужный сигнал (скорее всего, это будет clicked(bool))


Название: Re: обработка события в Checkbox
Отправлено: nirraen от Октябрь 01, 2019, 11:46
да это я уже нашел, но теперь вопрос ещё глупее.
создается шаблон в mainwindow.cpp
Код:
void MainWindow::on_checkbox_effectsk_clicked(bool checked)
{
   
}

нужная функция описана в main.cpp и принимает 3 значения.
Код:
void EffectSK(bool x, QString wayEffectSK, QString AppWay)
{
.......
}

как мне наладить видимость для этой функции, если слот создается в mainwindow.h
Код:
private slots:
    void on_checkbox_effectsk_clicked(bool checked);


может кто-нибудь дать пример простенький:
Если пользователь нажал или снял галочку - запускать нужную функцию, в которой будет if else с полученным bool значением от поля checked (статус галочек будет сохраняться в settings.ini восстанавливаться при загрузке).


Название: Re: обработка события в Checkbox
Отправлено: ViTech от Октябрь 01, 2019, 12:13
может кто-нибудь дать пример простенький:

Qt Examples And Tutorials (https://doc.qt.io/qt-5/qtexamplesandtutorials.html)


Название: Re: обработка события в Checkbox
Отправлено: kambala от Октябрь 01, 2019, 12:14
а что мешает переместить функцию из main.cpp в mainwindow.cpp? :)

ну если не хочется, то можно в mainwindow.h или mainwindow.cpp объявить ее как
Код
C++ (Qt)
extern void EffectSK(bool x, QString wayEffectSK, QString AppWay);
и после этого сможешь ее вызывать внутри on_checkbox_effectsk_clicked.


Название: Re: обработка события в Checkbox
Отправлено: nirraen от Октябрь 02, 2019, 09:42
а что мешает переместить функцию из main.cpp в mainwindow.cpp? :)

ну если не хочется, то можно в mainwindow.h или mainwindow.cpp объявить ее как
Код
C++ (Qt)
extern void EffectSK(bool x, QString wayEffectSK, QString AppWay);
и после этого сможешь ее вызывать внутри on_checkbox_effectsk_clicked.

не получается переместить из main.cpp в mainwindow.cpp потому что QString wayEffectSK, QString AppWay - видно только в main.cpp =( т.е. передать в эту функцию эти значения я могу только из main.cpp =( я думаю из-за отсутствия знаний и опыта у меня не хватает пока ума понять как это реализовать)
А еще надо разобраться как работают сигналы.
Мне казалось всё сначала простым. Мол перешел к слоту и написал что сделать в случае true и что сделать в случае false, но из-за двух файлов
mainwindow.cpp и main.cpp теперь фиг знает как же описать эту функцию и где =(.

по сигналу с формы нужно запустить функцию void EffectSK(bool x, QString wayEffectSK, QString AppWay);
в X должно попасть положение true или false поля checked в Checkbox. так получается что сейчас это положение видно только в mainwindow.cpp.
а дальше идут действия с файлами в зависимости от этого положения. QString wayEffectSK, QString AppWay - это пути. Они известны в main.cpp
if (x==true) {.....}
else {.....}


upd: допёр как перенести функцию в mainwindows.cpp)). спасибо за идею. Делаю.




Название: Re: обработка события в Checkbox
Отправлено: kambala от Октябрь 02, 2019, 11:54
да, очень сказывается отсутствие знаний в С/С++ :)


Название: Re: обработка события в Checkbox
Отправлено: nirraen от Октябрь 02, 2019, 12:04
Всё получилось. функция работает, написана в mainwindow.cpp.
Положение галочек сохраняются и подгружаются с файла после перезапуска.
Огромное спасибо за советы и ответы!

я просто изначально не понимал зачем вообще нужен mainwindow.cpp, если есть main.cpp, а оказывается оба используются и ничего в этом сверхъестественного нет. Просто вся работа на форме по-умолчанию осуществляется в mainwindow.cpp. По клику на "перейти к слоту".


Название: Re: обработка события в Checkbox
Отправлено: ViTech от Октябрь 02, 2019, 12:20
Просто вся работа на форме по-умолчанию осуществляется в mainwindow.cpp.

При этом нужно понимать, что основная работа программы не должна быть сосредоточена в формах, они нужны только для взаимодействия с пользователем. Но это на отдалённое будущее :).