qt类

Qt之QMetaObject::invokeMethod()使用简介

https://blog.csdn.net/luoyayun361/article/details/97915133

概述

Qt元对象系统是Qt最核心的一个基础特性,元对象系统负责信号和插槽对象间通信机制、运行时类型信息和Qt属性系统。为应用程序中使用的每个QObject子类创建一个QMetaObject实例,此实例存储QObject子类的所有元信息。通过元对象系统,你可以查询QObject的某个派生类的类名、有哪些信号、槽、属性、可调用方法等信息,然后可以使用QMetaObject::invokeMethod()调用QObject的某个注册到元对象系统中的方法。而这里,主要就介绍改函数的使用方法,以及大致简介。

QMetaObject::invokeMethod()

QMetaObject的invokeMethod()方法用来调用一个对象的信号、槽、可调用的方法。这是一个静态方法,其函数原型如下:

  • 如果type是Qt :: QueuedConnection,则会发送一个QEvent,并在应用程序进入主事件循环后立即调用该成员。

假设要异步调用QThread上的quit()槽:

QMetaObject::invokeMethod(thread, "quit", Qt::QueuedConnection);
注意,要调用的类型必须是信号、槽,以及Qt元对象系统能识别的类型, 如果不是信号和槽,可以使用qRegisterMetaType()来注册数据类型。此外,使用Q_INVOKABLE来声明函数,也可以正确调用。


————————————————
版权声明:本文为CSDN博主「luoyayun361」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luoyayun361/article/details/97915133

 

Qt中图像的显示与基本操作

https://www.cnblogs.com/Romi/archive/2012/03/14/2396533.html

1. Qt可显示的图像类型

参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP、GIF、JPG、JPEG、PNG、TIFF、PBM、PGM、PPM、XBM、XPM。

2. Qt用如何显示图像

通常用QLabel显示图像,QLabel类有setPixmap()函数,可以用来显示图像。也可以直接用QPainter画出图像。

如果图像过大,直接用QLabel显示,将会出现有部分图像显示不出来,这时可以用Scroll Area部件。方法:将QLabel部件放到Scroll Area部件里面,将两个采用栅格布局,当图像超出了QLabel部件大小时,就会产生滑动杆,这样图像就可以都看到了。

3. 显示的方法

步骤:先打开一个图像;将图像文件加载进QImage对象中;再用QPixmap对象获得图像;最后用QLabel选择一个QPixmap图像对象显示。

代码如下:

 

Qt智能指针--QPointer

https://blog.csdn.net/luoyayun361/article/details/90199081

QPointer智能指针

https://blog.csdn.net/u014746838/article/details/107253906

QPointer<QObject> objPtr;
qDebug() << "objPtr.isNull() : " << objPtr.isNull();
 
objPtr = new QObject();    //创建一个对象
qDebug() << "objPtr.isNull() : " << objPtr.isNull();
 
delete objPtr;            //释放对象 
qDebug() << "objPtr.isNull() : " << objPtr.isNull();

 

概述

QPointer是Qt提供的一个比较特别的智能指针,和其它智能指针有很大的不同,该智能指针专门为自动释放内存资源而设计的。

正文

QPointer本质是一个模板类,属于Qt对象模型的特性,它为QObject提供了guarded pointer,当其指向的对象被销毁时,它会被自动置NULL。

需要注意的是:QPointer所指向的对象必须是QObject或其派生类对象。 因为其对象析构时会执行QObject的析构函数,进而执行QObjectPrivate::clearGuards(this);

通常情况下,我们在手动delete一个指针的时候,需要再将其置空,要不然会变成一个悬挂的野指针,那么QPointer就是帮忙干这事的,会在对象被销毁时,自动设置为NULL。

QPointer 属于Qt Object模型的核心机制之一,请注意和其他智能指针的区别。

来看一个示例对比:
不用智能指针:
————————————————
版权声明:本文为CSDN博主「luoyayun361」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luoyayun361/article/details/90199081

 

Qt智能指针--QScopedPointer

https://blog.csdn.net/luoyayun361/article/details/90228638

QScopedPointer和C++中的智能指针std::unique_ptr其概念是一样的,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确地删除。但它有更严格的所有权,并且不能转让,一旦获取了对象的管理权,你就无法再从它那里取回来。也就是说,只要出了作用域,指针就会被自动删除,因为它的拷贝构造和赋值操作都是私有的,与QObject及其派生类风格相同。

QScopedPointer

首先我们来看一个官方示例:

没有使用智能指针:
 

void myFunction(bool useSubClass)
 {
     QScopedPointer<MyClass> p(useSubClass ? new MyClass() : new MySubClass);
     QScopedPointer<QIODevice> device(handsOverOwnership());

     if (m_value > 3)
         return;

     process(device);
 }

 

另外还有一个函数要注意。
void QScopedPointer::reset(T *other = Q_NULLPTR):delete目前指向的对象,调用其析构函数,将指针指向另一个对象other,所有权转移到other。

QScopedArrayPointer

 

QPushButton类参考

http://www.qiliang.net/old/qt/qpushbutton.html

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值