标签: qobject

未解析的外部符号"public:virtual struct QMetaObject const*__thiscall Parent

我从QObject继承了一个类:

class Parent: public QObject
{
    Q_OBJECT
    QObject* cl;

public:
    Parent(QObject *parent=0):QObject(parent) {
        cl = NULL;
    }

    QObject* getCl() const {
        return cl;
    }
    void setCl(QObject *obj) {
        cl = obj;
    }
};
Run Code Online (Sandbox Code Playgroud)

但是当我写道:

Parent ev;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Parent::metaObject(void)const " (?metaObject@Parent@@UBEPBUQMetaObject@@XZ)

main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual void * __thiscall Parent::qt_metacast(char const *)" (?qt_metacast@Parent@@UAEPAXPBD@Z)

main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual int __thiscall Parent::qt_metacall(enum QMetaObject::Call,int,void …
Run Code Online (Sandbox Code Playgroud)

c++ qt qobject

67
推荐指数
8
解决办法
7万
查看次数

Qt链接器错误:"对vtable的未定义引用"

这是我的标题:

#ifndef BARELYSOCKET_H
#define BARELYSOCKET_H

#include <QObject>
//! The First Draw of the BarelySocket!

class BarelySocket: public QObject
{
    Q_OBJECT

public:
    BarelySocket();
public slots:
    void sendMessage(Message aMessage);
signals:
    void reciveMessage(Message aMessage);

private:
    //   QVector<Message> reciveMessages;
};

#endif // BARELYSOCKET_H
Run Code Online (Sandbox Code Playgroud)

这是我的班级:

#include <QTGui>
#include <QObject>
#include "type.h"
#include "client.h"
#include "server.h"

#include "barelysocket.h"

BarelySocket::BarelySocket()
{
    //this->reciveMessages.clear();
    qDebug("BarelySocket::BarelySocket()");
}

void BarelySocket::sendMessage(Message aMessage)
{
}

void BarelySocket::reciveMessage(Message aMessage)
{
}
Run Code Online (Sandbox Code Playgroud)

我收到链接器错误:

undefined reference to 'vtable for BarelySocket'
Run Code Online (Sandbox Code Playgroud)
  • 这意味着我有一个未实现的虚方法.但我班上没有虚拟方法.
  • 我评论出矢量认为它是原因,但错误并没有消失.
  • Message是一个复杂的struct …

c++ qt linker-errors vtable qobject

60
推荐指数
5
解决办法
3万
查看次数

什么时候应该使用Q_OBJECT?

文件指出:

该Q_OBJECT宏必须出现在类的定义,声明自己的信号和槽的私人部分或使用通过Qt的元对象系统提供的其他服务.

究竟是什么意思呢?我可以安全地省略哪些QObject派生类?如果你在一个QObject派生类忽略Q_OBJECT会出现的问题,然后从一个继承?基本上我想了解更多关于何时可以从我的Qt课程中省略它的信息.

c++ qt qobject

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

Qt接口或抽象类和qobject_cast()

我有一组相当复杂的C++类,它们是用Java重写的.因此每个类都有一个继承的类,然后它还实现了一个或多个抽象类(或接口).

是否可以使用qobject_cast()从类转换为其中一个接口?如果我从中导出所有接口QObject,由于模糊QObject引用,我会收到错误.但是,如果我只继承了基类QObject,我就无法使用,qobject_cast()因为它与QObjects一起运行.

我希望能够在它们的接口引用的插件和DLL之间抛出类.

c++ qt interface qt4 qobject

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

是否可以断开所有QObject的连接而不删除它

我有一个QObject A,它连接到另一个QObject B.现在我希望A连接到C,第三个QObject并完全断开与B.

十分简单!麻烦的是我有很多A都有自己的信号和插槽(B/C更通用).到目前为止,我已经为每个不同的类类型手动创建了connect和disconnect方法.该方法基本上交换彼此的副本connect进行disconnect通话,逆着不要重复自己).

所以我的问题是:以下功能是否可行?

void deleteAllConnections(QObject* someObject) {
    // TODO disconnect all connections owned by someObject
    // For bonus points: Is there a way of accessing the QMetaObject connected to?
}
Run Code Online (Sandbox Code Playgroud)

我在QMetaObject,QObject以及Signals and Slots文档中捅了一下没有运气(虽然这通常不是保证......).

c++ qt qobject qmetaobject

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

在QGraphicsScene类中跟踪鼠标移动

我将QGraphicsScene子类化,并添加方法mouseMoveEvent来处理鼠标移动事件.我在GraphicsView上创建了一个标尺,并使用标尺跟踪鼠标移动.在QGraphicsScene :: mousemoveEvent中,我将expliitely调用标尺小部件的mouseMoveEvent.目的是让标尺知道当前的鼠标位置.

现在,当我移动鼠标时,似乎没有调用QGraphicsScene :: mousemoveEvent.但是,如果我按住鼠标左键并按住按钮移动它,我可以使它工作.这不是我想看到的; 每当我将鼠标放在视图上并移动鼠标时,我都会调用此方法.

有没有解决方法?

qt qgraphicsview qobject qgraphicsscene

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

在Qt中序列化我的自定义类

我用读/写QObjects 是真的吗?我用它序列化一个类,但是当反序列化它不是原始类!

我能做什么?

这是我的基类标题:

class Base : public QObject
{
    Q_OBJECT
public:
    explicit Base(QObject *parent = 0);


};
QDataStream &operator<<(QDataStream &ds, const Base &obj);
QDataStream &operator>>(QDataStream &ds, Base &obj) ;
Run Code Online (Sandbox Code Playgroud)

和.cpp是:

Base::Base(QObject *parent) :
    QObject(parent)
{
}
QDataStream &operator<<(QDataStream &ds, const Base &obj) {
    for(int i=0; i<obj.metaObject()->propertyCount(); ++i) {
        if(obj.metaObject()->property(i).isStored(&obj)) {
            ds << obj.metaObject()->property(i).read(&obj);

        }
    }
    return ds;
}
QDataStream &operator>>(QDataStream &ds, Base &obj) {
    QVariant var;
    for(int i=0; i<obj.metaObject()->propertyCount(); ++i) {
        if(obj.metaObject()->property(i).isStored(&obj)) {
            ds >> var;
            obj.metaObject()->property(i).write(&obj, var); …
Run Code Online (Sandbox Code Playgroud)

c++ serialization qt qobject

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

Qt中Q_PROPERTY有什么意义?

我无法理解Q_PROPERTY的用法.Q_PROPERTY如何帮助使程序防御?它是干什么用的?我见过论坛,但真的无法进行论坛.我已经理解了这个例子,但不是它的用法.

这是一个例子,我从中获得了什么.我知道阅读会给予阅读权限.

write属性将赋予仅写入权限.但它有什么需要呢?有人可以举例说明吗?

 class MyClass : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
     Q_ENUMS(Priority)

 public:
     MyClass(QObject *parent = 0);
     ~MyClass();

     enum Priority { High, Low, VeryHigh, VeryLow };

     void setPriority(Priority priority)
     {
         m_priority = priority;
         emit priorityChanged(priority);
     }
     Priority priority() const
     { return m_priority; }

 signals:
     void priorityChanged(Priority);

 private:
     Priority m_priority;
 };
Run Code Online (Sandbox Code Playgroud)

c++ qt qobject qt-signals qproperty

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

如何在不派生QObject的情况下使用SIGNAL和SLOT?

或其他方式来表达我的问题(虽然它没有解决我的问题):'QObject :: QObject'无法访问类'QObject'中声明的私有成员

我的课程中需要SIGNALs和SLOTS功能,但我认为不可能从中衍生出来QObject

class MyClass
{
signals:
   importantSignal();
public slots:
   importantSlot();
};
Run Code Online (Sandbox Code Playgroud)

问题似乎是我需要派生QObject来使用信号和插槽......但我需要默认的构造函数MyClass.但由于以下特性,我无法构造它们QObject: No Copy Constructor或Assignment Operator.

我试了很多......

所以我的上课看起来像这样:

#include <QObject>
class MyClass: public QObject
{
    Q_OBJECT
public:
    explicit MyClass(QObject *parent = 0); //autogenerated by qtcreator for QObject derived class
    MyClass(const MyClass * other);

signals:
    importantSignal();
public slots:
    importantSlot();
};
Run Code Online (Sandbox Code Playgroud)

我需要默认的构造函数MyClass.

那么有没有可能避免"'QObject :: QObject'无法访问类'QObject'中声明的私有成员"错误?

或者作为替代方案是否有可能没有使用信号和插槽QObject

我很高兴有任何建议.

c++ qt qobject slot qt-signals

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

在QObject派生类中重复Q_DISABLE_COPY

在Qt中有一个宏允许为类声明私有拷贝构造函数和赋值运算符:http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#Q_DISABLE_COPY

据说这个宏应该用于所有QObject(尤其是QWidget)派生类.

我理解这是如何工作的以及为什么它有用.

我不明白:有什么理由在我的QObject派生类中重复Q_DISABLE_COPY而QObject已经包含Q_DISABLE_COPY并且通过这有效地防止了我的派生类被复制了吗?

c++ qt noncopyable qobject qt5

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