子控件Z-ORDER顺序 :置顶、置底

本文介绍了如何使用SetWindowPos函数来调整Windows应用程序中子控件的Z-ORDER顺序,以实现控件置顶或者改变显示层级。示例代码展示了将一个按钮置顶的具体操作,通过设置HWND_TOP参数并结合SWP_NOMOVE和SWP_NOSIZE标志,实现了窗口位置和大小不变而仅调整Z-ORDER的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调整子控件的Z-ORDER顺序,可以使用SetWindowPos这个函数

一。SetWindowPos

BOOL SetWindowPos(
  HWND hWnd,             // handle to window
  HWND hWndInsertAfter,  // placement-order handle
  int X,                 // horizontal position
  int Y,                 // vertical position
  int cx,                // width
  int cy,                // height
  UINT uFlags            // window-positioning options
);

关键的参数

hWndInsertAfter

HWND_BOTTOM  

HWND_NOTOPMOST

HWND_TOP

HWND_TOPMOST

如图:选择一个按钮置顶时的操作:

::SetWindowPos(m_hFocus,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);

void MainWindow::init() { QScreen *screen = this->screen(); if(screen) { setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); // QRect screenGeometry = screen->geometry(); // 创建中央窗口部件 QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget); m_tipLable = new QLabel("请正对屏幕,进行人脸认证",centralWidget); m_tipLable->setAlignment(Qt::AlignCenter); m_tipLable->setFixedHeight(50); m_tipLable->setStyleSheet( "color: #00F5FF;" // 字体颜色 "font-size: 20px;" // 字号 "font-family: SimHei;" // 黑体(Windows/Linux) "font-weight: bold;" // 加粗 ); // 创建标签和布局 m_background_lable = new QLabel(centralWidget); m_background_lable->setAlignment(Qt::AlignCenter); m_background_lable->setStyleSheet("QLabel{border-image: url(:/image/FaceBg.png);}"); // QImage img(":/image/FaceBg.png"); // m_background_lable->setPixmap(QPixmap::fromImage(img)); // m_background_lable->setAutoFillBackground(true); // m_background_lable->setStyleSheet( // "background-color: white;" // ); m_video_lable = new QLabel(centralWidget); m_video_lable->setAlignment(Qt::AlignCenter); QVBoxLayout *vlayout = new QVBoxLayout(centralWidget); vlayout->setContentsMargins(0, 0, 0, 0); vlayout->addWidget(m_tipLable); vlayout->addWidget(m_background_lable, 1); // 添加伸展因,使标签填充空间 vlayout->addWidget(m_video_lable, 1); // 调整主窗口大小 // move(screenGeometry.topLeft()); // resize(screenGeometry.size()); // 确保标签在窗口大小改变时也能正确调整 m_video_lable->setScaledContents(true); activateWindow(); } }m_background_lable加载背景图片,m_video_lable显示人脸图片,是通过void MainWindow::ShowImage(const QImage &image) { if(m_http) m_http->enqueueImage(image); m_video_lable->setPixmap(QPixmap::fromImage(image).scaled(QSize(1000,800), Qt::KeepAspectRatio)); m_video_lable->setAlignment(Qt::AlignCenter); }这个槽函数实时设置的,调整这个代码,让m_video_lable和m_background_lable一样大,使m_background_lable覆盖在m_video_lable上
最新发布
06-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿峰的编程博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值