Russian Qt Forum
Март 29, 2024, 12:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: указатели на функцию  (Прочитано 3729 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Март 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);
}
 
 
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Март 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()));
}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #2 : Март 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 классах
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Март 14, 2018, 21:19 »

kambala, я понял, что ТС хочет по нажатию на разные кнопки создавать объект и соединять его сигнал со слотом окна, а нужный слот выбирается в зависимости от нажатой кнопки.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.179 секунд. Запросов: 22.