#ifndef WMyBtn_H
#define WMyBtn_H
#include <QObject>
#include <QPushButton>
#include <QMouseEvent>
class WMyBtn : public QPushButton
{
Q_OBJECT
public:
WMyBtn(QWidget* p);
signals:
void clickLeftButton(void);
void clickRightButton(void);
protected:
void mouseReleaseEvent(QMouseEvent* e);
};
#endif // WMyBtn_H
Qt свой класс кнопки.
Код:
Код:
#include "WMyBtn.h"
WMyBtn::WMyBtn(QWidget* p)
:QPushButton(p)
{}
void WMyBtn::mouseReleaseEvent(QMouseEvent *e)
{
if(e->button() == Qt::RightButton)
emit clickRightButton();
else
emit clickLeftButton();
}
WMyBtn::WMyBtn(QWidget* p)
:QPushButton(p)
{}
void WMyBtn::mouseReleaseEvent(QMouseEvent *e)
{
if(e->button() == Qt::RightButton)
emit clickRightButton();
else
emit clickLeftButton();
}
при этом получаю ругань линкера:
Код:
:4: undefined reference to `vtable for WMyBtn'
:4: undefined reference to `vtable for WMyBtn'
:4: undefined reference to `vtable for WMyBtn'
:4: undefined reference to `vtable for WMyBtn'
:10: undefined reference to `WMyBtn::clickRightButton()'
:12: undefined reference to `WMyBtn::clickLeftButton()'
:-1: error: collect2: ld returned 1 exit status
:4: undefined reference to `vtable for WMyBtn'
:4: undefined reference to `vtable for WMyBtn'
:4: undefined reference to `vtable for WMyBtn'
:10: undefined reference to `WMyBtn::clickRightButton()'
:12: undefined reference to `WMyBtn::clickLeftButton()'
:-1: error: collect2: ld returned 1 exit status
в теории работать должно, но вот на практике все так то совсем не так. все возможные перебилды не помогли, Qt 4.6, QtCreator 1.3.
Есть идея пересобрать либу, но может есть варианты надежней и проще?
ЗЫ: если убрать сигналы и макрос Q_OBJECT, то все нормально работает.
Код:
moc WMyBtn.h -o moc_WMyBtn.c
Цитата: loki231
Надо ещё выполнить
Получившийся файл moc_WMyBtn.c откомпилировать и прилинковать.
Код:
moc WMyBtn.h -o moc_WMyBtn.c
вообще ожидал, что это проделает QtCreator... баг, надо им в багтрекер написать!=)