5-Qt6 QObjec对象拷贝
生活随笔
收集整理的這篇文章主要介紹了
5-Qt6 QObjec对象拷贝
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
QObject所有的直接子類和間接子類都沒有拷貝構(gòu)造函數(shù)和賦值運算符。
QT的設(shè)計即是如此,它們使用了Q_DISABLE_COPY宏并在類的私有段聲明的。
開發(fā)者在某些場景下需要使用QObject作為“值”時,必須使用QObject指針傳遞,而不能使用值傳遞
1、錯誤場景?
如下演示代碼,cat作為一個繼承與普通的QObjcect類,當test函數(shù)調(diào)用時會報錯“QObject& QObject::operator=(const QObject&)' is private Class &operator=(const Class &) Q_DECL_EQ_DELETE;”
?
#include <QCoreApplication>#include "cat.h" #include <QDebug>void test(Cat cat) {qInfo() << "Addr " << &cat; }int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);Cat kitty;test(kitty);return a.exec(); }?2、正確場景:
用指針和地址傳遞是完全可以的。
#include <QCoreApplication>#include "cat.h" #include <QDebug>void test(Cat &cat) {qInfo() << "Addr " << &cat; }void test2(Cat *cat) {qInfo() << "Ptr " << cat; }int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);Cat kitty;kitty.setObjectName("kitty");Cat death;death.setObjectName("Death");test(kitty);test2(&kitty);test(death);test2(&death);return a.exec(); }//cat.cpp和cat.h在兩種場景下通用的,它僅僅是一個繼承于QObject的子類。
//cat.h #ifndef CAT_H #define CAT_H#include <QObject>class Cat : public QObject {Q_OBJECT public:explicit Cat(QObject *parent = nullptr);signals:};#endif // CAT_H //cat.cpp #include "cat.h"Cat::Cat(QObject *parent) : QObject(parent) {}總結(jié)
以上是生活随笔為你收集整理的5-Qt6 QObjec对象拷贝的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4-Qt6控制台项目信号与槽
- 下一篇: 6-Qt6对象树及内存管理