gpt4 book ai didi

c++ - Qt Creator/C++ 调整绘图大小

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:04 24 4
gpt4 key购买 nike

我需要一些帮助来调整二维图形的大小。经过 4 小时的搜索和尝试不同的方法后,我想我应该在这里发布一个问题。

[项目]:我正在尝试使用 slider 绘制并调整图形大小和旋转图形。出于某种原因,它不想对数字采取行动。每次 slider 值更改和返回时,我都想将大小增加 1。

我不想使用 QPainter::scale 或 rotate。

[代码]:

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{

a = 250;
b = 150;
c = 200;
d = 150;


ui->setupUi(this);

connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(change(int)));

}

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

void Dialog::paintEvent(QPaintEvent *e)
{
QPainter painter(this);

painter.fillRect(a,b,c,d, Qt::green);

}

void Dialog::change(int value1)
{
if(value1 > value2)
{
next = ++value1;
a = a;
b = b;
c = c + next;
d = d + next;
}
}

[标题]:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QtGui>
#include <QtCore>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
Q_OBJECT

public:
explicit Dialog(QWidget *parent = 0);
~Dialog();

public slots:
void change(int value1);

private:
Ui::Dialog *ui;
int value2, next;

protected:
void paintEvent(QPaintEvent *e);
int a,b,c,d;
};

最佳答案

调用 QWidget::update()将更新表单并触发绘制事件。

假设您有一个 horizo​​ntalSlider 在范围 [-100; 100],这是一个小例子:

dialog.h:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
Q_OBJECT

public:
explicit Dialog(QWidget *parent = 0);
~Dialog();

protected:
void paintEvent(QPaintEvent *e);

private:
Ui::Dialog *ui;
int a,b,c,d;
};

#endif // DIALOG_H

对话框.cpp:

#include "dialog.h"
#include "ui_dialog.h"

#include <QPainter>

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
ui->horizontalSlider->setMinimum(-100);
ui->horizontalSlider->setMaximum(100);

a = 10;
b = 10;
c = 200;
d = 150;

connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(update()));
}

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


void Dialog::paintEvent(QPaintEvent *e)
{
QPainter painter(this);

painter.fillRect(a,
b,
c + ui->horizontalSlider->value(),
d + ui->horizontalSlider->value(),
Qt::green);

}

如果您想以中心为轴心点缩放矩形,只需使用:

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);

}

在此示例中,矩形围绕左上角轴心点调整大小。如果这不是您想要的,请告诉我,我会在回答中更加明确。

关于c++ - Qt Creator/C++ 调整绘图大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26454551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com