我在Windows 7 Ultimate 32位上使用Qt Creator 2.0.1和Qt 4.7.0(32位).
请考虑以下代码,这是产生错误的最小代码:
class T : public QObject, public QGraphicsItem
{
Q_OBJECT
public:
T() {}
QRectF boundingRect() const {return QRectF();}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget) {}
};
int main()
{
T t;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段导致以下链接器错误:
在函数"T"中:
未定义引用`vtable for T'
未定义引用`vtable for T'
在函数`~T'中:
未定义引用`vtable for T'
未定义引用`vtable for T'
如果我注释掉包含的行Q_OBJECT,它编译得很好.我需要信号和插槽,QGraphicsItem所以我需要Q_OBJECT.
代码有什么问题?谢谢.
我正在使用Code :: Blocks 8.02和mingw 5.1.6编译器.我在编译Qt项目时收到此错误:
C:\ Documents and Settings\Fuzz\Desktop\GUI\App_interface.cpp | 33 |未定义引用`vtable for AddressBook'
文件地址Book.h:
#ifndef ADDRESSBOOK_H
#define ADDRESSBOOK_H
#include <QWidget>
class QLabel;
class QLineEdit;
class QTextEdit;
class AddressBook : public QWidget
{
Q_OBJECT
public:
AddressBook(QWidget *parent = 0);
private:
QLineEdit *nameLine;
QTextEdit *addressText;
};
#endif
Run Code Online (Sandbox Code Playgroud)
文件AddressBook.cpp:
#include <QtGui>
#include "addressbook.h"
AddressBook::AddressBook(QWidget *parent)
: QWidget(parent)
{
QLabel *nameLabel = new QLabel(tr("Name:"));
nameLine = new QLineEdit;
QLabel *addressLabel = new QLabel(tr("Address:"));
addressText = new QTextEdit;
QGridLayout *mainLayout = new QGridLayout; …Run Code Online (Sandbox Code Playgroud) 我是Qt编程的初学者,并使用代码块进行编程.我创建了3个文件communic.h,commmunicate.cpp和main.cpp,如下所示:
communicate.h
#ifndef COMMUNICATE_H
#define COMMUNICATE_H
#include <QWidget>
#include <QApplication>
#include <QPushButton>
#include <QLabel>
class Communicate : public QWidget
{
Q_OBJECT
public:
Communicate(QWidget *parent = 0);
private slots:
void OnPlus();
void OnMinus();
private:
QLabel *label;
};
#endif
Run Code Online (Sandbox Code Playgroud)
communicate.cpp
#include "communicate.h"
Communicate::Communicate(QWidget *parent)
: QWidget(parent)
{
QPushButton *plus = new QPushButton("+", this);
plus->setGeometry(50, 40, 75, 30);
QPushButton *minus = new QPushButton("-", this);
minus->setGeometry(50, 100, 75, 30);
label = new QLabel("0", this);
label->setGeometry(190, 80, 20, 30);
connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus()));
connect(minus, SIGNAL(clicked()), …Run Code Online (Sandbox Code Playgroud) 我尝试在QWidget中创建自己的小部件.在类的构造函数中我有:
Square(QWidget *parent = 0, const char *name = 0, WFlags fl = 0);
Square::Square(QWidget *parent = 0, const char *name = 0, WFlags fl)
: QWidget(parent, name, f)
{
if (!name)
setName("Game");
reset();
underMouse=false;
}
Run Code Online (Sandbox Code Playgroud)
但我看到错误:'WFlags'尚未宣布
现在我重新制作了我的代码:
class Square : public QWidget
{
Q_OBJECT
public:
Square(QWidget *parent = 0);
};
Run Code Online (Sandbox Code Playgroud)
在square.cpp中:
Square::Square(QWidget *parent)
: QWidget(parent)
{
}
Run Code Online (Sandbox Code Playgroud)
但我看到错误:
错误:未定义引用`vtable for Square'
错误:collect2:ld返回1退出状态有什么问题?我怎样才能宣布基于QWidget的类的构造函数?
谢谢.
当我取消对信号槽所需的 Q_OBJECT 宏的注释时,我得到了一个对 vtable 的未定义引用,用于 MyApp 错误,但没有宏它可以完美编译,但没有它我无法使用信号和槽。我想我可能做错了一些愚蠢的事情,但请尝试提供帮助,因为我真的找不到问题所在。哦,我知道我的代码不整洁,正在处理它。
我的应用程序.h:
#ifndef MYAPP_H
#define MYAPP_H
#include <QApplication>
#include <QEvent>
#include <QObject>
#include <QDebug>
class MyApp : public QApplication
{
public:
MyApp( int argc, char** argv );
protected:
bool eventFilter(QObject *object, QEvent *event);
signals:
void focusG();
void focusL();
};
#endif // MYAPP_H
Run Code Online (Sandbox Code Playgroud)
myapp.cpp:
#include "myapp.h"
MyApp::MyApp(int argc, char **argv): QApplication(argc, argv)
{
installEventFilter(this);
}
bool MyApp::eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::ApplicationDeactivate)
{
qDebug() << "Focus lost";
//focusL();
}
if (event->type() == …Run Code Online (Sandbox Code Playgroud) 我正在使用c ++在Qt中编写一个程序.但是由于这个错误,我在这一点上陷入困境.奇怪的是,我创建了一个单独的程序,其中下面的代码工作,但当我把代码放在我的程序中时,我得到一个错误.
error: undefined reference to `vtable for Create_button_config'
Run Code Online (Sandbox Code Playgroud)
错误发生在我创建类的Header文件中.这是发生错误的头文件的一部分.
class Create_button_config : public QObject
{
Q_OBJECT
public:
QMap<QString, QString> buttons;
void setParameters(){
qDebug() << "test";
buttons["ID1"] = "#52B1";
buttons["ID2"] = "#52B2";
buttons["ID3"] = "#52B3";
}
};
Run Code Online (Sandbox Code Playgroud)
我在main.cpp中使用它就像这样
Create_button_config config;
config.setParameters();
Run Code Online (Sandbox Code Playgroud)
这个错误来自何处?顺便说一句,这是一个正确的方法来创建一个在我的整个代码中可用的关联数组?
提前致谢