【Qt-C++-2022-11-24】

3 篇文章 0 订阅

Qt-C+±2022-11-24

QDesktopWidget类

信息

头文件

#include
qmake:QT += widgets

继承

QWidget

概念

具有多个图形卡和监视器的系统可以管理可用作多个桌面或大型虚拟桌面的物理屏幕空间。
此类提供有关用户桌面的信息,例如其总大小,屏幕数,每个屏幕的几何形状,以及它们是配置为单独的桌面还是单个虚拟桌面。
由Qt提供的小工具使用这个类来将工具提示,菜单和对话框放置在他们的父应用程序或应用程序小部件的正确屏幕上。 应用程序可以使用此类来获取可用于保存窗口位置的信息,或将子窗口小部件和对话框放置在一个特定屏幕上。

QWidget类中的 parentWidget、window、nativeParentWidget区别理解

parentWidget

父窗体对象

window

QWidget::window()的官方解释如下:
为本窗体部件返回具有window属性的窗体。例如:返回本窗体继承链向上且距离本窗体最近的祖先类窗体且具有(或可能具有)系统边框的窗体。
Qt的QWidget::isWindow()函数用来判断一个窗体是否是一个window,其官方的解释如窗体下:
如果这个窗体是一个独立的window,则返回true,否则返回false。一个具有window属性的窗体是这样的一个窗体:它从视觉上来说不像是其它任何窗体部件的子窗体,它通常有标题栏和系统边框。一个window可以有父窗体。window窗体经常被它的父窗体进行分组管理,当它的父窗体被删除的时候,它也会被删除,它的父窗体最小化时,它也跟着最小化了,如果它能够被窗体管理器管理,在任务栏和它的父公用一个任务栏图标。这种行为可以通过 Qt::Window枚举来指定。

nativeParentWidget

QWidget::nativeParentWidget()的官方解释如下:
返回本窗体的native parent 窗体。例如:返回本窗体继承链向上且距离本窗体最近的祖先类具有系统标识符(即类似句柄的东西)的窗体,如果这样的窗体不存在,则返回nullptr。

Qt::findChild()

示例

返回parentWidget中一个名为“button1”的QPushButton孩子,即使按钮不是父亲的直接孩子:

QPushButton *button = parentWidget->findChild<QPushButton *>("button1");

返回parentWidget中的一个QListWidget孩子:

QListWidget *list = parentWidget->findChild<QListWidget *>();

返回parentWidget(它的直接父亲)中一个名为“button1”的QPushButton孩子:

QPushButton *button = parentWidget->findChild<QPushButton *>("button1", Qt::FindDirectChildrenOnly);

返回parentWidget(它的直接父亲)中的一个QListWidget孩子:

QListWidget *list = parentWidget->findChild<QListWidget *>(QString(), Qt::FindDirectChildrenOnly);

QVariant类

QVariant类似于C++中的Union,可以存储各种数据类型,类似js中的var,可以使用setValue()方法设置数据,fromValue()为静态方法设置数据。
QVariant类类似于C++的联合数据类型,既可以保存很多QT类型的值,包括QColor、QBrush、QFont、QPen、QRect、QString和QSize等,也可以存放QT容器类型值。

构造函数

  • QVariant(bool b);
  • QVariant(double d);
  • QVariant(const QString &string);
  • QVariant(const QList &list);
  • QVariant(const QMap<QString,QVariant> &map);
  • QVariant(const QHash<QString,QVariant> &hash);
  • QVariant(const QVariant &other);

通过setValue()方法设置数据

QVariant v;
v.setValue(5);

静态方法设置数据-fromValue

QVariant v = QVariant::fromValue(xxx);

使用基本类型数据

//保存数据
QVariant var=12;
//获取数据
int data=var.toInt();

使用自定义类型数据

MyClass myClass;
//保存数据
QVariant data=QVariant::fromValue(myClass);
//获取数据
MyClass myClass=data.value<MyClass>();
int id=myClass.id;
QString name=myClass.name;

使用指针

//保存数据
QVariant var=QVariant::fromValue((void*)event);    
//获取数据
QPaintEvent* e=(QPaintEvent*)var.value<void*>();

举例

QVariant v{709};
    qDebug()<<v.toInt(); // 709

    QVariant w{"Hello World"};
    qDebug()<<w; // QVariant(QString, "Hello World")
    qDebug()<<w.toString(); // "Hello World"

    QMap<QString,QVariant>map{{"int",709},{"double",3.14}};
    map["string"] = "Hello World";
    map.insert("color",QColor(255,0,0));
    // 调用相应的转换函数
    qDebug()<<map["int"]<<map["int"].toInt(); // QVariant(int, 709) 709
    qDebug()<<map["double"]<<map["double"].toDouble(); // QVariant(double, 3.14) 3.14
    qDebug()<<map["string"]<<map["string"].toString(); // QVariant(QString, "Hello World") "Hello World"
    qDebug()<<map["color"]<<map["color"].value<QColor>(); // QVariant(QColor, QColor(ARGB 1, 1, 0, 0)) QColor(ARGB 1, 1, 0, 0)

    QStringList sl;
    sl << "A" << "B" << "C" << "D";
    QVariant vt{sl};

    if(vt.type()==QVariant::StringList) {
        auto list = vt.toStringList();
        for (int i=0;i<list.size();++i ) {
            qDebug()<<list.at(i);
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Create Possible

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值