Qt 设置:两个窗口位置重合

2023-11-19

目录

Qt 设置:两个窗口位置重合

QT向界面中嵌套新的界面

===================

 

QT向界面中嵌套新的界面

https://www.cnblogs.com/bob-jianfeng/p/11609012.html

 

第一步,

先进入ui编辑界面,加入一个水平或者垂直的布局(根据自己选则,我用水平)充满整个mainwindow

注意右边我更改了 QHBoxLayout的名称 为pHBoxLayout

然后运行一遍 ;(注意需要运行一遍 要不然类找不到pHBoxLayout 这个布局)

第二步,

接着定义一个方法(向mainwindow增加窗口的方法) (mainwindow.cpp)

1 void MainWindow::putwidget(QWidget* widget)
2 {
3     ui->pHBoxLayout->addWidget(widget);
4 }

第三步,?

新建一个class文件 定义为myWidget名称 inherent QObject和QWidget

 在类名myWidget后面增加 :public QWidget

Qt 设置:两个窗口位置重合

QWidget中有很多获取坐标以及坐标转换的函数。

总体来说主要是

1、相对于屏幕的全局坐标 

2,、相对于窗口的相对坐标

下面这张图中由于只有一个窗口所有所有的坐标都是全局坐标

但是当此窗口中再加入一个子窗口,就复杂很多。

对于子窗口来说,所有获取坐标的函数都变成相对坐标了。

坐标转换:

mapFromGlobal, mapToGlobal, mapToParent

移动窗口:

move

move的用法Qt中解释容易混淆,If the widget is a window, the position is that of the widget on the desktop, including its frame.

意思就是:如果该widget没有父窗口就是全局坐标,有父窗口就是相对父窗口的坐标。相当于没父窗口那么屏幕就是父窗口。

(其实也不是绝对的,比如子窗口设置为Qt::Tool后窗口坐标就不再跟随父窗口而是全局

实现功能:

将红色窗口的左上角与灰色窗口左上角重合

窗口的层级如下(widget是灰色窗口):

设置红色窗口左上角坐标,即move函数的参数QPoint。

1、首先,这里的QPoint是相对NullWidget的,也就是说move(QPoint(0,0)),是移动红色窗口到主窗口的左上角而不是屏幕左上角。

2、接下来就是获取灰色窗口相对于NullWidget的坐标,这里如果直接

QPoint(ui.widget->geometry().x(),ui.widget->geometry().y())

是错误的(效果如下图)。

3、故而这边得分为两步,首先获取灰色窗口左上角相对于屏幕的绝对位置。

QPoint glPoint = ui.widget->mapToGlobal(QPoint(0,0));

然后获取glPoint相对于NullWidget的位置,

QPoint nullPoint = this->mapFromGlobal(glPoint);

最后

w->move(nullPoint);

就好了。

代码:

NullWidget::NullWidget(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    w = new QWidget(this);//红色窗口
    w->setStyleSheet(QString(" background-color: rgb(255, 0, 0)"));
}


void NullWidget::moveEvent(QMoveEvent* event)
{
    QPoint bb = ui.widget->mapToGlobal(QPoint(0,0));
    QPoint cc = mapFromGlobal(bb);
    w->move(cc);
}

最后有个问题,

如果想要红色窗口与ui.gridLayout左上角重合怎么做呢?

QLayout是没有mapToGlobal的。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 设置:两个窗口位置重合 的相关文章

随机推荐