相关疑难解决方法(0)

Q_OBJECT抛出'未定义的引用vtable'错误

我在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.

代码有什么问题?谢谢.

c++ qt linker-errors vtable

63
推荐指数
4
解决办法
6万
查看次数

未定义的vtable参考.试图编译一个Qt项目

我正在使用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)

c++ qt qmake

51
推荐指数
5
解决办法
8万
查看次数

Qt未定义对vtable的引用

我是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)

c++ user-interface qt4 codeblocks

33
推荐指数
4
解决办法
7万
查看次数

基于QWidget的Qt小部件

我尝试在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的类的构造函数?

谢谢.

c++ qt qwidget

4
推荐指数
1
解决办法
3374
查看次数

对 vtable 的未定义引用... Q_OBJECT 宏

当我取消对信号槽所需的 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++ macros qt undefined vtable

1
推荐指数
1
解决办法
1万
查看次数

Qt:对'vtable'的未定义引用

我正在使用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)

这个错误来自何处?顺便说一句,这是一个正确的方法来创建一个在我的整个代码中可用的关联数组?

提前致谢

c++ qt vtable referenceerror

0
推荐指数
1
解决办法
5140
查看次数