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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу достучаться до слота!  (Прочитано 2943 раз)
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()
{
 ...
}
 

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


Записан
Steven_Orko
Гость
« Ответ #1 : Март 25, 2009, 14:52 »

Может, написать Q_OBJECT?
Записан
Martiro
Гость
« Ответ #2 : Март 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
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Март 25, 2009, 16:36 »

где? в *.h при объявлении вложенного класса?

Да

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

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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