Название: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: billy4685 от Апрель 16, 2015, 11:27 Здравствуйте, господа форумчане. Как вызвать функцию не член класса, по нажатию кнопки? Пытался методом connect, ну ничего не вышло, требует чтобы в SLOT() бросался только слот объявлен в данном классе. А мне нужно по нажатию кнопки выполнить функцию, которая не является членом класса, в методе которого я и хочу вызвать эту функцию. Может, кто-то даст дельний совет? Может быть данное можно реализовать используя только события QEvent, а не через connect?
Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: Пантер от Апрель 16, 2015, 11:36 В Qt5 ты можешь хоть лямбду вызвать. Есть Qt4, то никак.
Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: m_ax от Апрель 16, 2015, 11:56 Есть Qt4, то никак. Почему никак? Просто вызывать эту внешнюю функцию через дополнительный слот, например) Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: Пантер от Апрель 16, 2015, 12:05 Есть Qt4, то никак. Почему никак? Просто вызывать эту внешнюю функцию через дополнительный слот, например) Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: billy4685 от Апрель 16, 2015, 12:42 В Qt5 ты можешь хоть лямбду вызвать. Есть Qt4, то никак. У меня как раз Qt5.3. Пытался следующим образом:Код: connect(but, SIGNAL(clicked()), newWindow()); но бьет ошибку. Если же эту функцию делаю членом класса, и в connect уже ишу SLOT(newWindow()) вместо newWindow(), то все работает. На всяк вариант прикрепил архив (набросал маленький пример по этому поводу). Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: Пантер от Апрель 16, 2015, 12:45 Код
Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: m_ax от Апрель 16, 2015, 12:48 Или проще:
Код
Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: billy4685 от Апрель 16, 2015, 13:25 Код
Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: billy4685 от Апрель 16, 2015, 13:27 Или проще: Это сработало. Спасибо. Но а если я хочу передавать значение в функцию newWindow(), как быть тогда?Код
connect(but, &QPushButton::clicked, newWindow(i)); так не тянет. Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: m_ax от Апрель 16, 2015, 13:32 Цитировать Это не работает в моем случаи. В профайле добавьтеCONFIG += c++11 Цитировать Но а если я хочу передавать значение в функцию newWindow(), как быть тогда? Тогда через лямбдуКод
Если параметр i внешний, то тогда так: Код
или так Код Если вместо [&] используется [=], все используемые переменные будут скопированы, что позволяет использовать лямбда-функцию вне области действия исходных переменных. https://ru.wikipedia.org/wiki/C%2B%2B11#.D0.9B.D1.8F.D0.BC.D0.B1.D0.B4.D0.B0-.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8_.D0.B8_.D0.B2.D1.8B.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F (https://ru.wikipedia.org/wiki/C%2B%2B11#.D0.9B.D1.8F.D0.BC.D0.B1.D0.B4.D0.B0-.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8_.D0.B8_.D0.B2.D1.8B.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F) Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: Пантер от Апрель 16, 2015, 13:38 А можно еще через std::bind. Мне он больше лямбды нравится.
Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: billy4685 от Апрель 16, 2015, 13:47 спасибо, сейчас попробую
Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: m_ax от Апрель 16, 2015, 13:50 Да, и через std::bind попробуйте.. Тоже полезно иметь в виду такую возможность)
Название: Re: Как вызывать сторонюю функцию по нажатию кнопки? Отправлено: billy4685 от Апрель 16, 2015, 14:44 спасибо, все работает)
|