我尝试使用滑块旋转矩形。
滑块的值为-100到+100。我想用它来旋转矩形。
我尝试了一些方法,包括计算矩形的角落然后用矩阵弄乱,因此不成功。
(我更喜欢使用矩阵)
更简单的解决方案是从头开始定义固定点,而不是仅使用矩形的边。
在下面的代码中,我可以使用滑块调整矩形的大小。
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
a = 230; //positioning
b = 150; //positioning
c = 200; //size of drawing
d = 150; //size of drawing
connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(update()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.fillRect(a - ui->horizontalSlider->value(),
b - ui->horizontalSlider->value(),
c + ui->horizontalSlider->value() * 2,
d + ui->horizontalSlider->value() * 2, Qt::green);
}
非常感谢任何形式的帮助。
答案 0 :(得分:2)
您可以移动画家并旋转画布来实现它:
void Dialog::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.save();
painter.translate(a, b);//Move pen.
painter.rotate(30);//rotate canvas.
painter.fillRect(-ui->horizontalSlider->value(),
-ui->horizontalSlider->value(),
c + ui->horizontalSlider->value() * 2,
d + ui->horizontalSlider->value() * 2, Qt::green);
painter.restore();
}
答案 1 :(得分:1)
首先,这里是旋转矩阵,它将围绕Z轴(面向你)的X-Y空间中的任何点旋转 t 弧度所给出的角度:
R = [ cos(t), -sin(t);
sin(t), cos(t)]
要获得旋转点,您必须围绕X-Y平面上的特定点旋转。我假设你想围绕它的中心旋转矩形。
设 c 为中心的像素坐标:
c = [cx;
cy]
然后旋转的点是:
P = R*(p-c) + c
其中 P 是旋转点, p 是要旋转的矩形点,两者都是[2x1]向量, c 。请注意,我使用的是矩阵代数,因此乘法是矩阵乘法,而不是标量乘法。 接下来的问题是绘制矩形。我不熟悉Qt rect绘图,但是从文档中,用fillRect做你想要的东西是行不通的,因为它假定矩形是未旋转的。 当你有旋转坐标时,可以使用drawPolygon做你想做的事。
答案 2 :(得分:0)
我通过使用“ painter.drawLine(ax,ay,bx,by); ”来绘制矩形来解决它。之后我为每一行使用了以下公式:
double ax = MidPointWidth + (-(Size + minWidth)) * cos(Angle) - (Size + minHeight) * sin(Angle);
double ay = MidPointHeight + (-(Size + minWidth)) * sin(Angle) + (Size + minHeight) * cos(Angle);
希望这会对某人有所帮助。