你如何在QT中积分?

时间:2011-10-17 22:39:40

标签: c++ qt plot qt-creator

我正在使用QT在C ++中编写一个应用程序,你有n个点并计算它的凸包。但是,一旦计算出来,我就不知道如何绘制点并绘制船体的边界。制作菜单按钮等很简单,但我不确定我知道这样做的工具。

你是怎么做到的?

4 个答案:

答案 0 :(得分:11)

图形视图,addEllipse

QGraphicsView可以很好地进行2D绘图,并为您提供了许多显示方式。它不像qwt那样专门用于绘制科学数据,而只是为了显示一堆点,几何或动画以及许多其他东西,它的效果非常好。请参阅Qt的Graphics View Framework文档和示例。

以下是如何在QGraphicsScene中绘制一系列点并在QGraphicsView中显示它。

#include <QtGui/QApplication>

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QPointF>
#include <QVector>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QVector <QPointF> points;

    // Fill in points with n number of points
    for(int i = 0; i< 100; i++)
       points.append(QPointF(i*5, i*5));

    // Create a view, put a scene in it and add tiny circles
    // in the scene
    QGraphicsView * view = new QGraphicsView();
    QGraphicsScene * scene = new QGraphicsScene();
    view->setScene(scene);

    for(int i = 0; i< points.size(); i++)
        scene->addEllipse(points[i].x(), points[i].y(), 1, 1);

    // Show the view
    view->show();

    // or add the view to the layout inside another widget

    return a.exec();
}

注意:您可能希望在视图上调用setSceneRect,否则场景只会自动居中。阅读Qt文档中QGraphicsSceneQGraphicsView的说明。您可以缩放视图以显示更多或更少的场景,并且可以放置滚动条。我回答了相关的question,其中我详细介绍了您可以使用QGraphicsView做些什么看看。

答案 1 :(得分:5)

您可以创建一个源自QWidget的自定义类,您可以在其中覆盖void paintEvent(QPaintEvent* event)方法。在那里,您将点放入某种点列表,std::vector<QPoint>QList<QPoint>,然后使用Polyline方法绘制它。例如:

void Foo::paintEvent(QPaintEvent* event)
{
  QPainter painter(this);
  std::vector<QPoint> points;
  // Fill points with the points
  painter.drawPolyLine(points.data(), static_cast<int>(points.size()));
}

答案 2 :(得分:2)

有一个图表库qwt,它提供Qt小部件 - 用于制作图表。

答案 3 :(得分:0)

Qt图表,QML或GraphicsView

这将是对我的QGraphics View示例的更新,但是花了很长时间,而且确实是一种完全不同的回答问题的方法。

Qt图表(自2016年以来提供LGPL)是无需第三方库即可实现此功能的好方法。

https://doc.qt.io/qt-5/qlineseries.html#QLineSeries

QLineSeries* series = new QLineSeries();
series->append(0, 6);
series->append(2, 4);
...
chart->addSeries(series);

特别是对于凸包示例,您可能需要QAreaSeries图表。

https://doc.qt.io/qt-5/qtcharts-areachart-example.html
https://doc.qt.io/qt-5/qareaseries.html

QLineSeries *series0 = new QLineSeries();
QLineSeries *series1 = new QLineSeries();
*series0 << QPointF(1, 5) << QPointF(3, 7) << QPointF(7, 6) << QPointF(9, 7) << QPointF(12, 6)
         << QPointF(16, 7) << QPointF(18, 5);
*series1 << QPointF(1, 3) << QPointF(3, 4) << QPointF(7, 3) << QPointF(8, 2) << QPointF(12, 3)
         << QPointF(16, 4) << QPointF(18, 3);
QAreaSeries *series = new QAreaSeries(series0, series1);

希望有帮助。