我想在窗口小部件中获取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)
答案 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>