• 5632阅读
  • 3回复

【提问】如何使用自定义SLOT [复制链接]

上一主题 下一主题
离线lcc_zjut
 

只看楼主 倒序阅读 楼主  发表于: 2006-02-27
我按照<<24小时学通QT>>学习,其中在7.2.4有一段关于自定义SLOT的代码,我按照他的代码写下来,编译,但是出现了错误,源码如下:
#include <qapplication.h>
#include <qwidget.h>
#include <qwidgetstack.h>
#include <qpushbutton.h>
class MyMainWindow : public QWidget
{
  Q_OBJECT
  public:
  MyMainWindow();
  private:
  QWidgetStack *wstack;
  QPushButton *b1,*b2,*cb1,*cb2;
  public slots:        
  void showb1(void );
  void showb2();
};
void MyMainWindow::showb1()
{
  wstack->raiseWidget(b1);
}
void MyMainWindow::showb2()
{
  wstack->raiseWidget(b2);
}
MyMainWindow::MyMainWindow()
{
  setGeometry(100,100,150,130);
  wstack=new QWidgetStack(this);
  wstack->setGeometry(10,10,130,80);
  b1=new QPushButton("button 1",this);
  b2=new QPushButton("button 2",this);
  wstack->addWidget(b1,1);
  wstack->addWidget(b2,2);
  cb1=new QPushButton("Raise b1",this);
  cb1->setGeometry(10,100,60,20);
  cb2=new QPushButton("Raise b2",this);
  cb2->setGeometry(80,100,60,20);
  connect(cb1,SIGNAL(clicked()),this,SLOT(showb1()));
  connect(cb2,SIGNAL(clicked()),this,SLOT(showb2()));
}
int main(int argc, char **argv)
{
  QApplication app(argc,argv);
  MyMainWindow mywin;
  mywin.show();
  return app.exec();
}


qmake -project
qmake
make

错误如下:
g++ -c -pipe -Wall -W -O2 -march=i386 -mcpu=i686 -g -DGLX_GLXEXT_LEGACY -fno-use-cxa-atexit -fno-exceptions -DQT_NO_DEBUG -I/usr/lib/qt-3.1/mkspecs/default -I. -I. -I/usr/lib/qt-3.1/include -o 4.o 4.cpp
g++ -o 4 4.o   -L/usr/lib/qt-3.1/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
4.o(.text+0x71): In function `MyMainWindow::MyMainWindow[not-in-charge]()':
/root/Desktop/Qt learn/4/4.cpp:30: undefined reference to `vtable for MyMainWindow'
4.o(.text+0x78):/root/Desktop/Qt learn/4/4.cpp:30: undefined reference to `vtable for MyMainWindow'
4.o(.text+0x381): In function `MyMainWindow::MyMainWindow[in-charge]()':
/root/Desktop/Qt learn/4/4.cpp:30: undefined reference to `vtable for MyMainWindow'
4.o(.text+0x388):/root/Desktop/Qt learn/4/4.cpp:30: undefined reference to `vtable for MyMainWindow'
4.o(.text+0x6ad): In function `main':
/root/Desktop/Qt learn/4/4.cpp:55: undefined reference to `vtable for MyMainWindow'
4.o(.text+0x6b4):/root/Desktop/Qt learn/4/4.cpp:55: more undefined references to `vtable for MyMainWindow' follow
collect2: ld returned 1 exit status
make: *** [4] Error 1
[ 此贴被lcc_zjut在2006-02-27 13:08重新编辑 ]
离线lcc_zjut

只看该作者 1楼 发表于: 2006-02-27
原来是我自己看书不够仔细,用自己定义的SLOT要用先用MOC的.
呵呵
离线xuxinshao

只看该作者 2楼 发表于: 2006-02-27
如果头文件中包含Q_OBJECT宏,则需要MOC编译器翻译成C++能识别的代码
离线goodbay
只看该作者 3楼 发表于: 2008-04-26
moc的步骤可以告诉我一下吗?万分感谢
快速回复
限100 字节
 
上一个 下一个