• 9032阅读
  • 3回复

【提问】初学者请教:编译自定义slots出错 [复制链接]

上一主题 下一主题
离线nuage
 
只看楼主 倒序阅读 楼主  发表于: 2005-10-29
按照论坛上安装方法装了qt-win-opensource-4.0.1-mingw.exe,devcpp-4.9.9.2_setup.exe两个程序,在编译下面程序时总是错误:  
代码:
  #include <QApplication>
  #include <QLCDNumber>
  #include <QPushButton>
  #include <QSlider>
  #include <QVBoxLayout>
  #include <QWidget>

class MyWidget : public QWidget
{
     Q_OBJECT
public:
     MyWidget(QWidget *parent = 0);
public slots:
    void MyExitSolt(int value);
   
};

MyWidget::MyWidget(QWidget *parent):QWidget( parent)
{
     QPushButton *btquit = new QPushButton("quit");//生成退出按钮
     
     QLCDNumber *lcd = new QLCDNumber(2); //lcd显示
     
     QSlider *slider = new QSlider(Qt::Horizontal); //滑动条
     slider->setRange(0,919);
     slider->setValue(0);
     

     connect(slider,SIGNAL(valueChanged(int)),this,SLOT(MyExitSolt(int)));
     
     
     QVBoxLayout *layout = new QVBoxLayout();
     layout->addWidget(btquit);
     layout->addWidget(lcd);
     layout->addWidget(slider);
     
     setLayout(layout);
     
}
  void MyWidget::MyExitSolt(int value)
  {
    int a=0;
  }


int main(int argc, char *argv[])
{
     QApplication app(argc,argv);
     
     MyWidget widget;
     widget.show();
     
     return app.exec();
}

在命令行下输入:qmake -project
              qmake
              mingw32-make
程序输出:
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `F:/Qt/test/badprogram'
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-s -Wl,-subsystem,windows -o "release\badprogram.exe" release\main.o -L"F:\Qt\4.0.0\lib" -lmingw32 -lqtmain -lQtCore4 -lQtGui4
mingw32-make[1]: Leaving directory `F:/Qt/test/badprogram'

release\main.o(.text+0x79):main.cpp: undefined reference to `vtable for MyWidget'
release\main.o(.text+0x80):main.cpp: undefined reference to `vtable for MyWidget'
release\main.o(.text+0x509):main.cpp: undefined reference to `vtable for MyWidget'
release\main.o(.text+0x510):main.cpp: undefined reference to `vtable for MyWidget'
release\main.o(.text+0x9d4):main.cpp: undefined reference to `vtable for MyWidget'
release\main.o(.text+0x9db):main.cpp: more undefined references to `vtable for MyWidget' follow
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\badprogram.exe] Error 1
mingw32-make: *** [release] Error 2

程序是加入了自定义slots后编译就总是出错。我找了QT自带的有关自定义slots的例子,重新编译都正常。请问这个程序问题出在哪里?有什么需改的?请各位多多指教,谢!


离线nuage
只看该作者 1楼 发表于: 2005-10-29
问题已解决。方法是把包含自定义slots的类和主文件分开。
离线fanyu
只看该作者 2楼 发表于: 2005-10-29
你应该从QMainWindow来派生一个类试试。
离线XChinux

只看该作者 3楼 发表于: 2005-10-29
你是把所有的程序都写到一个文件里了是吧??最好把头文件,实现文件和主函数文件分开写.这样,moc编译的时候才好处理.如果不分开的话,就要采用其它的方法来进行编译了.你搜索一下本版的帖子,我记得有一个帖子问到这个问题的,里面有解答怎样编译这样的程序的说明.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个