当前位置:网站首页>Qt QWidget嵌套相对位置获取 (qt 画线 嵌套)

Qt QWidget嵌套相对位置获取 (qt 画线 嵌套)

2022-06-23 03:56:00 超自然祈祷

使用函数

QPoint QWidget::mapToGlobal(const QPoint &pos) const

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void paintEvent(QPaintEvent *);
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QPainter>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    p.setPen(Qt::blue);
    p.drawLine(ui->pushButton->pos(),ui->pushButton_3->pos());


    p.setPen(Qt::red);
    p.drawLine(ui->pushButton->pos(),ui->pushButton_2->pos());


    p.setPen(Qt::green);
    p.drawLine(ui->pushButton->pos(), ui->pushButton_2->mapToGlobal( QPoint(0,0) - this->mapToGlobal( QPoint(0,0)) ));
}

.ui文件 和 运行结果 截图

按代码上的颜色分辨

pushButton_3、pushButton 是同级,都在界面上(蓝色线位置正确)

pushButton_2 是在一个widget里嵌套的 使用pushButton_2->pos()得到的是它在方框中的位置,所以连线位置出错(红色线

绿色线是使用mapToGlobal函数,窗口、pushButton_2都相对于显示器的位置,这样计算的位置就正确了。

原网站

版权声明
本文为[超自然祈祷]所创,转载请带上原文链接,感谢
https://blog.csdn.net/sinat_27382047/article/details/125306896