有没有可能创建一个继承自QObject的单例类?我在添加QObject继承后遇到编译错误。也许问题出在静态单例创建上(应该是动态的)?以下是我的方法:
头文件
#ifndef BLUETOOTHMANAGER_H
#define BLUETOOTHMANAGER_H
#include <QObject>
class BluetoothManager : public QObject
{
Q_OBJECT
public:
virtual ~BluetoothManager() {}
/// Static getter
static BluetoothManager & GetInstance()
{
return instance;
}
private:
/// static Bluetooth manager instance
static BluetoothManager instance;
explicit BluetoothManager(QObject * parent);
};
#endif // BLUETOOTHMANAGER_H
和cpp文件
#include "BluetoothManager.h"
/// singleton creation
BluetoothManager BluetoothManager::instance = BluetoothManager(static_cast<QObject*>(nullptr));
BluetoothManager::BluetoothManager(QObject * parent)
: QObject(parent)
{
}
编译时出现了错误。
../QtHealthApp/network/bluetooth/BluetoothManager.cpp:4:94: error: use of deleted function ‘BluetoothManager::BluetoothManager(const BluetoothManager&)’ BluetoothManager BluetoothManager::instance = BluetoothManager(static_cast<QObject*>(nullptr));
^ In file included from /opt/Qt5.12.LTS/5.12.6/gcc_64/include/QtCore/qnamespace.h:43:0,
from /opt/Qt5.12.LTS/5.12.6/gcc_64/include/QtCore/qobjectdefs.h:48,
from /opt/Qt5.12.LTS/5.12.6/gcc_64/include/QtCore/qobject.h:46,
from /opt/Qt5.12.LTS/5.12.6/gcc_64/include/QtCore/QObject:1,
from ../QtHealthApp/network/bluetooth/BluetoothManager.h:4,
from ../QtHealthApp/network/bluetooth/BluetoothManager.cpp:1: ../QtHealthApp/network/bluetooth/BluetoothManager.h:33:20: note: declared here
Q_DISABLE_COPY(BluetoothManager)
^ /opt/Qt5.12.LTS/5.12.6/gcc_64/include/QtCore/qglobal.h:372:5: note: in definition of macro ‘Q_DISABLE_COPY’
Class(const Class &) Q_DECL_EQ_DELETE;\
^
BluetoothManager::GetInstance
方法中返回指向您的BluetoothManager
实例的指针,而不是实例本身。 - Tim Körner