gpt4 book ai didi

c++ - 使用 Qt 绘制抛物线或任何其他多项式

转载 作者:行者123 更新时间:2023-11-28 06:40:15 25 4
gpt4 key购买 nike

有没有办法使用 Qt 库来绘制抛物线或任何其他多项式?我尝试使用 QPainter,但那里没有这样的选项。谢谢

最佳答案

如果您想使用 QPainter,那么您应该使用 QImage 或 QPixmap 来显示或保存您的输出。

这是一个简单的代码,展示了它是如何在 Qt Widgets 应用程序中完成的。

这将是 MainWindow.h 文件。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QImage>
#include <QPainter>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void drawMyFunction(qreal xMin,qreal xMax);
qreal myFunction(qreal x);
QImage * pic;
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

这将是您的 MainWindow.cpp:

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

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

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

void MainWindow::drawMyFunction(qreal xMin, qreal xMax)
{
qreal step = (xMax - xMin) / 1000;
QPainterPath painterPath;
QSize picSize(300,300);
for(qreal x = xMin ; x <= xMax ; x = x + step)
{
if(x == xMin)
{
painterPath.moveTo(x,myFunction(x));
}
else
{
painterPath.lineTo(x,myFunction(x));
}
}
// Scaling and centering in the center of image
qreal xScaling = picSize.width() / painterPath.boundingRect().width();
qreal yScaling = picSize.height() / painterPath.boundingRect().height();
qreal scale;
if(xScaling > yScaling)
scale = yScaling;
else
scale = xScaling;
for(int i = 0 ; i < painterPath.elementCount() ; i++ )
{
painterPath.setElementPositionAt(i,painterPath.elementAt(i).x*scale + picSize.width()/2,-painterPath.elementAt(i).y*scale + picSize.height()/2);
}
// Drawing to the image
pic = new QImage(picSize,QImage::Format_RGB32);
pic->fill(Qt::white);
QPainter picPainter(pic);
QPen myPen;
myPen.setColor(Qt::black);
myPen.setWidth(10);
picPainter.drawPath(painterPath);
ui->label->setPixmap(QPixmap::fromImage(*pic)); // label is an added label to the ui
// you can also do this instead of just showing the picture
// pic->save("myImage.bmp");
}

qreal MainWindow::myFunction(qreal x)
{
return x*x; // write any function you want here
}

关于c++ - 使用 Qt 绘制抛物线或任何其他多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093921/

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