30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
1

Как в функцию передать функцию, которая будет слотом?

08.12.2014, 21:42. Показов 3065. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как в функцию передать функцию, которая будет слотом?
То, что написано в интернете и тут (например: Как передавать указатель на функцию в функцию для ее выполнения?) для слотовой функции не пожходит.
Пишет:
Код
QObject::connect: No such slot MainWindow::(this->*slot)()
Кто знает, напишите плз код того, как это делается.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2014, 21:42
Ответы с готовыми решениями:

[Многопоточность] Как в функцию, которая будет выполняться в отдельном потоке, передать нужные аргументы?
Есть функция: UINT control1(LPVOID Param) { char msg;char pr="w"; while(true){...

Как передать функцию из другого класса в функцию glutSpecialFunc() которая находится в main?
В программе которая двигает нарисованную мною фигуру в OpenGl, есть функция регистрации нажатия...

Решение системы уравнений: написать функцию, которая как параметр будет использовать другую функцию
Ребята помогите разобраться с указателем на функцию! у меня решается система ДУ методом...

Написать функцию, которая могла бы передать значение в другую функцию
как сделать функцию которая бы могла передать значеие в другую функцию ну к примеру a=4*b; где...

12
5231 / 3203 / 362
Регистрация: 12.12.2009
Сообщений: 8,112
Записей в блоге: 2
09.12.2014, 18:49 2
Не силен в Qt, но могу предпложить что наличие своего мета транслятора (moc) в Qt обязывает слоты быть известными на этапе компиляции. Поэтому никак.
0
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
09.12.2014, 19:02 3
Цитата Сообщение от [progeR] Посмотреть сообщение
функцию, которая будет слотом?
тоесть вам надо не отдельную функцию передать, а чей то метод? Почему тогда не передать указательна обьект.
+ можно передать сигнал и emit его потом
0
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
09.12.2014, 19:16 4
C++ (Qt)
1
connect(sender, &Sender::valueChanged,  receiver, &Receiver::updateValue );
Источник
0
5231 / 3203 / 362
Регистрация: 12.12.2009
Сообщений: 8,112
Записей в блоге: 2
09.12.2014, 20:13 5
Я погуглил и понял, что был не прав. Думаю ответ на вопрос можно здесь найти, но там это все через одно место делается.
0
23 / 23 / 5
Регистрация: 05.12.2013
Сообщений: 215
09.12.2014, 20:55 6
ТС, префразируйте вопрос. Я лично ничего не понял, но чувствую, что там что-то элементарное...
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
09.12.2014, 21:14 7
так не годится?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <functional>
#include <QApplication>
#include <QWidget>
 
typedef std::function<void()> FuncObj;
 
struct Foo
{
    void Get(FuncObj o){ o(); }
};
 
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    Foo s;
    QWidget wgt;
    
    s.Get(std::bind(&QWidget::show, &wgt));
}
0
5231 / 3203 / 362
Регистрация: 12.12.2009
Сообщений: 8,112
Записей в блоге: 2
09.12.2014, 21:56 8
Цитата Сообщение от Nelkor Посмотреть сообщение
префразируйте вопрос.
Цитата Сообщение от Кудаив Посмотреть сообщение
так не годится?
что-то мне подсказывает, что ТСу нужно в рантайме связать слот с сигналом через указатель на функцию/метод, которая является слотом. Т.е. на момент компиляции слот неизвестен.
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
09.12.2014, 22:08 9
ждем разъяснений
0
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
10.12.2014, 16:02 10
Цитата Сообщение от Kastaneda Посмотреть сообщение
слот с сигналом через указатель на функцию/метод
он же так и написал, связать сигнал со слотом, по указателю на слот. Тоетсь без обьекта, которому этот слот принадлежит.
0
5231 / 3203 / 362
Регистрация: 12.12.2009
Сообщений: 8,112
Записей в блоге: 2
10.12.2014, 20:51 11
Цитата Сообщение от Fallenworld Посмотреть сообщение
он же так и написал, связать сигнал со слотом, по указателю на слот. Тоетсь без обьекта, которому этот слот принадлежит.
я думаю проблема в том, что слот не известен на этапе компиляции и становится известен только при выполнении. А не в том, что это метод какого-то объекта и нужно как-то привязать его без объекта.
Нужны разъяснения от ТС.
0
Диссидент
Эксперт C
27685 / 17308 / 3807
Регистрация: 24.12.2010
Сообщений: 38,963
10.12.2014, 22:16 12
У меня в самом начале знакомства с Qt проскочил такой вариант
C++ (Qt)
1
2
    char *s = "1Tetra()";
    QObject::connect(tet, SIGNAL(clicked()), mw, s);
И по нажатию на кнопку tet прекрасно вызвался слот Tetra().
Дальше я эту тему развивать не стал, ибо не зачем было. Но можно попытаться с этой техникой поиграться.
Встречный вопрос. Зачем ТС понадобилось это? Может быть есть другие, более регулярные способы решить его проблему? Я, к примеру, почти все сигналы от кнопок ловлю одним слотом, а уж там по sender() разбираюсь, кто сигнал послал и что ему от меня надо.

Добавлено через 2 минуты
Вообще, если возникают такие вопросы, может быть стоит посмотреть файлы, генерируемые moc-ом...
1
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
11.12.2014, 21:15  [ТС] 13
Спасибо всем откликнувшимся. Сделал так:
C++ (Qt)
1
2
3
4
5
6
7
typedef void (MainWindow::*saveSlot)(void);
void MainWindow::_createTextEdit(QWidget *tab, const QString filename, saveSlot slot)
{
...
connect(generateHtml, &QPushButton::clicked, this, slot);
...
}
А так, да. Слот определяю я, когда тыкаю на кнопку в окне программы. Происходит генерация вкладки, создание нужных виджетов на ней и т.д.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2014, 21:15
Помогаю со студенческими работами здесь

Необходимо передать в пользовательскую функцию (которая подключается dll) функцию, описанную в mathcad
Задача, необходимо передать в пользовательскую функцию (которая подключается dll) функцию описанную...

Написать функцию Факториал и программу, которая будет использовать эту функцию
Суть программы: Нужно написать функцию Факториал и программу.ю которая будет использовать эту...

Создать функцию, которая будет вызывать другую функцию
Доброго времени суток. Изучаю PHP и вот столкнулся с такой практикой, не знаю как реализовать....

Как передать в функцию объект класса, будет ли это эффективно?
Я создаю график: zedGraph3.Location = new System.Drawing.Point(20, 10); //Для OFDM ...

как передать параметры в функцию, которая приклеена к событию?
element.click = func(parameter1,parameter2)

Как в метод/функцию передать имя объекта над которым будет происходить воздействие?
Как в метод/функцию передать имя объекта над которым будет происходить воздействие? У меня есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru