Qt - 在translate()

时间:2017-09-19 12:02:43

标签: qt qwidget qpainter

我想在窗口小部件中获取QRect或QPoint的坐标,以确定该对象是否与边缘重叠,并将在窗口小部件之外绘制。

以下程序只是一个显示我的问题的测试程序。有一个窗口,然后绘制一个黑色矩形。 通过使用QPainter的translate(),我移动坐标系。之后,我无法获得矩形的正确坐标。

我可以跟踪所有坐标系操作(translate(),rotate(),scale())但这不是一个好的解决方案。是否有更简单的方法来获取Rectangle相对于小部件左上角的位置?

#include "widget.h"
#include <QPainter>
#include <iostream>

Widget::Widget(QWidget *parent)     
    : QWidget(parent) 
{

}

void Widget::paintEvent(QPaintEvent *) 
{   
    QPainter painter(this);     
    painter.translate(width() / 2, height() / 2);

    QRect rectangle(100, 50, 200, 100);

    std::cout << "width(): " << this->width() << "\theight(): " << this->height()
              << "\trecLeft X: " << rectangle.x() << "\trecTop Y: " << rectangle.y()
              << std::endl;
    //Output: width(): 960  height(): 432   recLeft X: 100  recTop Y: 50
}

我想得到的是:

recLeft X: 580(width()/2+100) recTop Y: 266(height()/2+50)

1 个答案:

答案 0 :(得分:0)

您可以获取画家的变换矩阵并将其应用于矩形。它应该是这样的:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <tr>
        <td>Name</td>
        <td>Age</td>
        <td>Btton</td>
    </tr>
    <tr>
        <td>Tom</td>
        <td>21</td>
        <td><input type="button" id="b" value="alert" /></td>
    </tr>
</table>