Название: указатели на функцию
Отправлено: demaker от Март 14, 2018, 10:47
Скажите возможна ли такая работа с указателями на функцию в классе C++ (Qt) class MainWindow : publc QMainWindow { Q_OBJECT public: MainWindow(); virtual~MainWindow(); private slots: void clickedPbFunc1(); void clickedPbFunc2(); private: void Operation(void (MainWindow::*funcPtr)()); void Func1(); void Func2(); }
C++ (Qt) void MainWindow::Operation(void (MainWindow::*funcPtr)()) { SmthClass *smth = new SmthClass; connect(smth, &SmthClass::smth_signal, this, funcPtr); } void MainWindow::clickedPbFunc1() { Operation(&MainWindow::Func1); } void MainWindow::clickedPbFunc2() { Operation(&MainWindow::Func2); }
Название: Re: указатели на функцию
Отправлено: __Heaven__ от Март 14, 2018, 14:24
Имхо, возможна. Но выглядит неприятно. Можно попробовать улучшить вид. C++ (Qt) void MainWindow::clickedPbFunc() { /*static*/ const std::map<QObject, void (MainWindow::*funcPtr)()> funMap = { {pb1, &MainWindow::Func1} }; SmthClass *smth = new SmthClass; connect(smth, &SmthClass::smth_signal, this, funMap.at(sender())); }
Название: Re: указатели на функцию
Отправлено: kambala от Март 14, 2018, 17:55
Имхо, возможна. Но выглядит неприятно. Можно попробовать улучшить вид. C++ (Qt) void MainWindow::clickedPbFunc() { /*static*/ const std::map<QObject, void (MainWindow::*funcPtr)()> funMap = { {pb1, &MainWindow::Func1} }; SmthClass *smth = new SmthClass; connect(smth, &SmthClass::smth_signal, this, funMap.at(sender())); }
не очень понятно при чем тут QObject — использовать указатели на методы можно и в не-Qt классах
Название: Re: указатели на функцию
Отправлено: __Heaven__ от Март 14, 2018, 21:19
kambala, я понял, что ТС хочет по нажатию на разные кнопки создавать объект и соединять его сигнал со слотом окна, а нужный слот выбирается в зависимости от нажатой кнопки.
|