crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как присоединить сигнал к функции, являющейся не членом какого либо объекта
niXman
  опции профиля:
сообщение 23.8.2008, 0:33
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Допустим. Некоторый объект испускает сигнал, который можно соединить со слотом другого объекта. Это стандартная ситуация.
А как быть если сигнал нужно соединить с функцией, не являющейся членом?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.8.2008, 7:25
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


см. использование Сигналов без Слотов
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 23.8.2008, 10:52
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Litkevich Yuriy, Ну это понятно. Меня такое не устраивает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 25.8.2008, 7:13
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 23.8.2008, 11:25) *

Кстати, можно сделать такой объект более универсальным:
class TmpSlot: QObject {
  Q_OBJECT
public:
  typedef void(*RealSlot)();
  TmpSlot(RealSlot realSlot, QWidget *parent = 0) :
    QObject(parent), realSlot(realSlot) {
    assert(realSlot);
  }

public slots:
    void doSlot() {realSlot();}
private:
  RealSlot realSlot;
};

Тогда использование становится таким:
int main(int argc, char *argv[]) {
  QPushButton *btnPath = new QPushButton("Open");
....
  TmpSlot tmp(&myfunk);
  QObject::connect(btnPath, SIGNAL(clicked()), &tmp, SLOT(doSlot()));
....
}


Сообщение отредактировал Tonal - 25.8.2008, 7:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 25.8.2008, 21:42
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Tonal, Ага! Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 26.8.2008, 6:54
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Там кнопочка для спасибы есть. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 27.8.2008, 23:56
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Tonal, Зделал :p
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 13.8.2020, 20:19