Qt show背后发生的一些事

本文探讨了Qt框架中`show`函数的工作原理,揭示了窗口显示背后的细节。通过分析,我们发现`show`并不直接创建窗口句柄,而是由`setVisible`触发,递归创建所有子窗口。实验部分展示了窗口及其子窗口如何根据显示调用来决定创建和显示,强调了父窗口状态对子窗口的影响。
摘要由CSDN通过智能技术生成

Qt show背后发生的一些事

分析

一个窗口要在操作系统中显示出来,必然要调用操作系统提供的接口。例如在window平台上编写界面程序时,程序员需要设计窗口类,向操作系统注册窗口类,创建窗口句柄,显示窗口1

show并没有做什么:

void QWidget::show()
    {
        Qt::WindowState defaultState = 
          QGuiApplicationPrivate::platformIntegration()->defaultWindowState(
          data->window_flags);
        if (defaultState == Qt::WindowFullScreen)
            showFullScreen();
        else if (defaultState == Qt::WindowMaximized)
            showMaximized();
        else
            setVisible(true); // FIXME: Why not showNormal(), like QWindow::show()?
    }

真正创建窗口句柄的任务在setVisible中被调用:

void QWidget::setVisible(bool visible)
{
        if (visible) { // show
            if (testAttribute(Qt::WA_WState_ExplicitShowHide) &&                
                !testAttribute(Qt::WA_WState_Hidden))
                return;

            Q_D(QWidget);

          /*
          如果该widget的句柄还未被创建,且该窗口是一个独立窗口或者是父窗口
          已经创建了窗口句柄的一个非独立窗口,那么就创建一个窗口句柄(对应win32的实现为
          注册窗口类和回调过程,创建窗口)。
          */
            //create toplevels but not children of non-visible parents
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值