Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Сигналы и namespace


Автор: math64 8.9.2011, 12:21
Код

//myobject.h
namespace my {
class MyObject : public QObject {
signals:
  void signal(MyObject*);
};

}
//mainwindow.h
//using namespace my;
class MainWindow : public QMainWindow {
private slots:
  void slot(my::MyObject*);
  //void slot(MyObject*);
};
//mainwindow.cpp
connect(myObject, SIGNAL(MyObject*), mainWindow, SLOT(slot(MyObject*));


connect работает только если использовать using namespace my; в заголовке и объявлять слот без указания пространства имён, иначе получаем
Код

QObject::connect: Incompatible sender/receiver arguments
        my::MyObject::signal(MyObject*) --> MainWindow::slot(my::MyObject*)

Можно ли обойтись без using?

Автор: alexvs11 8.9.2011, 13:05
SIGNAL преобразует описание сигнала в char* строку, которая потом используется для формирования связи
я думаю макрос и внутренее устройство просто не понимают namespace'ов

Автор: borisbn 8.9.2011, 13:19
Цитата(math64 @  8.9.2011,  12:21 Найти цитируемый пост)
connect(myObject, SIGNAL(MyObject*), mainWindow, SLOT(slot(MyObject*));

Внутри SIGNAL нужно наверное так ?
Цитата
connect(myObject, SIGNAL( signal( MyObject* ) ), mainWindow, SLOT(slot(MyObject*));


Сейчас посмотрел у себя - я пишу с полным NS и всё работает. Т.е. типа так
Код

connect( myObject, SIGNAL( signal( my::MyObject* ) ), mainWindow, SLOT( slot( my::MyObject * ) );

Автор: math64 8.9.2011, 16:03
Да, нужно указать пространство имён в сигнале и слоте, тогда всё работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)