Russian Qt Forum

Qt => Общие вопросы => Тема начата: Martiro от Март 25, 2009, 14:49



Название: Не могу достучаться до слота!
Отправлено: Martiro от Март 25, 2009, 14:49
Проблема в следующем...
Внутри своего класса создаю еще один класс. В нем необходимо создать QAction, который нужно связать со слотом внутри того же (вложенного) класса.
Компиляция проходит, но при появлении формы консоль пишет:
Цитировать
QObject::connect: No such slot QCanvasView::checkItemOrder()
QObject::connect:  (sender name: 'unnamed')
QObject::connect:  (recevier name: 'my_view')

В *.h:
Код
C++ (Qt)
class MyClass : public QWidget
{
  Q_OBJECT
public:
  MyClass (QWidget * parent = 0, const char* name = 0);
 
  ...
  ...
  ...
private:
  class MyView : public QCanvasView
  {
   public:
       MyView (QWidget * parent, const char * name = 0, WFlags f = 0);
 
       ...
       QAction * actMyAction;
       ...
   public slots:
       void checkItemOrder();
       ...
   };
...
};
 

В *.cpp:
Код
C++ (Qt)
MyClass::MyClass (QWidget * parent = 0, const char* name = 0)
   : QWidget (parent, name)
{
...
my_view = new MyView (this, "my_view",0);
...
}
...
 
MyClass::MyView::MyView (QWidget * parent, const char * name = 0, WFlags f = 0)
   : QCanvasView (parent, name)
{
  ...
  actMyAction = new QAction ("action", 0, this);
  actMyAction->setEnabled(true);
 
  connect(actMyAction, SIGNAL(activated()), SLOT(checkItemOrder()));
  ...
}
 
void MyClass::MyView::checkItemOrder()
{
 ...
}
 

Как решить проблему? Переносить коннект на главный виджет проблематично...




Название: Re: Не могу достучаться до слота!
Отправлено: Steven_Orko от Март 25, 2009, 14:52
Может, написать Q_OBJECT?


Название: Re: Не могу достучаться до слота!
Отправлено: Martiro от Март 25, 2009, 15:10
где? в *.h при объявлении вложенного класса?
тогда при компиляции пишет
Цитировать
In function `MyClass::MyView::MyView(QWidget *, char const *, unsigned int)':
: undefined reference to `MyClass::MyView::QPaintDevice virtual table'
bi_frame.o(.text+0x3289): In function `MyClass::MyView::MyView(QWidget *, char const *, unsigned int)':
: undefined reference to `MyClass::MyView virtual table'
collect2: ld returned 1 exit status


Название: Re: Не могу достучаться до слота!
Отправлено: pastor от Март 25, 2009, 16:36
где? в *.h при объявлении вложенного класса?

Да

тогда при компиляции пишет

тогда выноси класс MyView за пределы MyClass