• 6234阅读
  • 12回复

简单的程序不知道错在哪里? [复制链接]

上一主题 下一主题
离线style
 
只看楼主 倒序阅读 楼主  发表于: 2006-05-21
#include <qapplication.h>
#include <qpushbutton.h>

class myWidget:public QWidget
{
   Q_OBJECT
   public:
       myWidget(QWidget *parent = 0, const char *name = 0);
   public slots:
       void shutDown();
   private:
       QPushButton *exit;
};

myWidget::myWidget(QWidget *parent, const char *name):QWidget(parent, name)
{
   setMinimumSize(120, 180);
   setMaximumSize(120, 180);
   exit = new QPushButton("ShutDown!",this);
   connect(exit,SIGNAL(clicked()),this,SLOT(shutDown()));
}

void myWidget::shutDown()
{
   system("halt");
}

int main(int argc, char **argv)
{
   QApplication app(argc, argv);
   myWidget *w = new myWidget();
   w->show();
   app.exec();
}
离线style
只看该作者 1楼 发表于: 2006-05-21
怎么没人帮我
离线shiroki

只看该作者 2楼 发表于: 2006-05-22
什么描述都没有怎么帮你
编译程序很费时间,更何况破坏性这么强的程序也没办法试验
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线guyansrg

只看该作者 3楼 发表于: 2006-05-22
还是自己先说一下有什么错误发生吧
离线guyansrg

只看该作者 4楼 发表于: 2006-05-22
main函数里的最后一句应该为 return app.exec();

system("halt");能正常工作吗?
离线style
只看该作者 5楼 发表于: 2006-05-23
return app.exec()

这处改后还是不行。


root@style:~/Desktop/shutdown# qmake -project
root@style:~/Desktop/shutdown# qmake
root@style:~/Desktop/shutdown# make
g++ -Wl,-rpath,/usr/lib/qt/lib -o shutdown shut.o   -L/usr/lib/qt/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
shut.o(.text+0x21): In function `myWidget::myWidget[not-in-charge](QWidget*, char const*)':
: undefined reference to `vtable for myWidget'
shut.o(.text+0x28): In function `myWidget::myWidget[not-in-charge](QWidget*, char const*)':
: undefined reference to `vtable for myWidget'
shut.o(.text+0x141): In function `myWidget::myWidget[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for myWidget'
shut.o(.text+0x148): In function `myWidget::myWidget[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for myWidget'
collect2: ld returned 1 exit status
make: *** [shutdown] 错误 1
root@style:~/Desktop/shutdown#
离线XChinux

只看该作者 6楼 发表于: 2006-05-23
楼主把那个类的定义和实现分别放到一个.h和.cpp文件中,把main函数放到单独的main.cpp文件中。
这样就行了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线style
只看该作者 7楼 发表于: 2006-05-23
谢谢老大。
离线lhbzqh
只看该作者 8楼 发表于: 2006-05-23
为什么一定要分开呢?
标准c++可以这样写的啊
离线0708yc
只看该作者 9楼 发表于: 2009-07-05
今天我也遇到了你的问题,我绞尽脑汁也找不到原因,看了网上好多人都转载了同一篇文章的内容,而且还说的乱七八糟的的。经过我不断尝试,我终于找到了原因了,其实大家可能是习惯了在VC的环境下工作,没有写析构函数的习惯,可是到了QT的环境下就不行了,编译器不让我们偷这个懒,析构函数必须得写出。解决这个问题只要把析构函数的实现写出来就OK,并不是什么文件包含或Q_OBJECT宏的问题。
离线foxyz

只看该作者 10楼 发表于: 2009-07-06
请记住:

当你的类需要使用Q_OBJECT的时候,必须单独写这个header file,因为QT需要parse 这个文件并生成一个moc_xxx.cpp文件
离线mmmou2000
只看该作者 11楼 发表于: 2009-07-07
在你的文件底部 加#include "文件名.moc"
当然 分开class的申明和实现 是好习惯
离线qindq

只看该作者 12楼 发表于: 2009-07-08
引用第8楼lhbzqh于2006-05-23 16:44发表的  :
为什么一定要分开呢?
标准c++可以这样写的啊


定义了Q_OBJECT后
因为QT要用moc把*.h生产一个moc_*.cpp文件
如果把类定义混在其他文件里
QT就晕了
快速回复
限100 字节
 
上一个 下一个