编译qt程序遇到奇怪的错误?求解

hjt013 2010-10-27 10:23:29
代码如下
finddialog.h

#ifndef FINDDIALOG_CLASS
#define FINDDIALOG_CLASS
#include <QDialog>

class QLabel;
class QLineEdit;
class QPushButton;
class QCheckBox;

class FindDialog:public QDialog
{
Q_OBJECT

public:
FindDialog(QWidget *parent=0);
signals:
void findNext(const QString &str,Qt::CaseSensitivity cs);
void findPrevious(const QString &str,Qt::CaseSensitivity cs);
private slots:
void findClicked();
void enableFindButton(const QString &text);

private:
QLabel *findLabel;
QLineEdit *edit;
QPushButton *find;
QPushButton *close;
QCheckBox *box1;
QCheckBox *box2;



};
#endif


finddialog.cpp 文件

#include "finddialog.h"
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>
#include <QGridLayout>
#include <QtGui>
#include <QString>

FindDialog::FindDialog(QWidget *parent):QDialog(parent)
{
findLabel= new QLabel(tr("Find &What"));
//findLabel->show();
edit= new QLineEdit;
//edit->show();
findLabel->setBuddy(edit);
box1= new QCheckBox(tr("Match &case"));
box1->show();
box2= new QCheckBox(tr("Search &backward"));
box2->show();
find = new QPushButton(tr("&Find"));
find->setDefault(true);
find->setEnabled(false);
find->show();
close =new QPushButton(tr("Close"));
close->show();
connect(edit,SIGNAL(testChanged(const QString &)),this,SLOT(enableFindButton(const QString &)));
connect(find,SIGNAL(clicked()),this,SLOT(findClicked()));
connect(close,SIGNAL(clicked()),this,SLOT(close()));

QGridLayout *layout = new QGridLayout;
layout->addWidget(findLabel,0,0);
layout->addWidget(edit,0,1);
layout->addWidget(find,0,2);
layout->addWidget(box1,1,0,1,2);
layout->addWidget(close,1,2);
layout->addWidget(box2,2,0,1,3);
//layout->show();
setLayout(layout);

}
void FindDialog::findClicked()
{
QString text = edit->text();
Qt::CaseSensitivity cs = box1->isChecked()?Qt::CaseSensitive : Qt::CaseInsensitive;
if(box2->isChecked())
{
emit findPrevious(text,cs);
}
else
{
emit findNext(text,cs);
}
}
void FindDialog::enableFindButton(const QString &text)
{
find->setEnabled(!text.isEmpty());
}
void FindDialog::findPrevious(QString const&, Qt::CaseSensitivity)
{
}
void FindDialog::findNext(QString const&, Qt::CaseSensitivity)
{
}

编译出现的错误如下:

finddialog.o: In function `FindDialog::FindDialog(QWidget*)':
finddialog.cpp:(.text+0xee): undefined reference to `vtable for FindDialog'
finddialog.cpp:(.text+0xf5): undefined reference to `vtable for FindDialog'
finddialog.cpp:(.text+0x10d): undefined reference to `FindDialog::staticMetaObject'
finddialog.cpp:(.text+0x1a7): undefined reference to `FindDialog::staticMetaObject'
finddialog.cpp:(.text+0x216): undefined reference to `FindDialog::staticMetaObject'
finddialog.cpp:(.text+0x285): undefined reference to `FindDialog::staticMetaObject'
finddialog.cpp:(.text+0x31a): undefined reference to `FindDialog::staticMetaObject'
finddialog.o: In function `FindDialog::FindDialog(QWidget*)':
finddialog.cpp:(.text+0x64e): undefined reference to `vtable for FindDialog'
finddialog.cpp:(.text+0x655): undefined reference to `vtable for FindDialog'
finddialog.cpp:(.text+0x66d): undefined reference to `FindDialog::staticMetaObject'
finddialog.cpp:(.text+0x707): undefined reference to `FindDialog::staticMetaObject'
finddialog.cpp:(.text+0x776): undefined reference to `FindDialog::staticMetaObject'
finddialog.cpp:(.text+0x7e5): undefined reference to `FindDialog::staticMetaObject'
finddialog.cpp:(.text+0x87a): undefined reference to `FindDialog::staticMetaObject'
collect2: ld returned 1 exit status
make: *** [finddialog] 错误 1

...全文
246 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yudeyinji1989 2012-08-23
  • 打赏
  • 举报
回复
同问!!
d393799203 2012-06-12
  • 打赏
  • 举报
回复
什么东西
hjt013 2010-10-28
  • 打赏
  • 举报
回复
楼上的说的没错,现在问题解决了。
dbzhang800 2010-10-27
  • 打赏
  • 举报
回复
肯定是一开始没添加 Q_OBJECT, 后来添加该宏后,没有运行过 qmake

题外:
#include <QtGui> 或 QtCore 是比较不好的习惯(当然,不是错误)
ww884203 2010-10-27
  • 打赏
  • 举报
回复
多么熟悉的程序啊!!!这个一定就是LINUX窗口程序设计-QT精彩实例分析里面的

你直接在CPP的最前面加上,#include <QtGui>,后面的include都是浮云

16,239

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧