如何在QT中绘制点
How do you plot points in QT?
我正在用QT在c++中编写应用程序,其中您有n个点并计算此凸壳。然而,一旦这是计算我不知道如何绘制点和绘制船体的边界。制作菜单按钮等是很简单的,但我不确定我知道做这个的工具。
你是怎么做到的?
图形视图,addEllipse
QGraphicsView
做2D绘图非常好,并为您提供了许多如何显示它的选项。它不像qwt
那样适合绘制科学数据,但只是为了显示一堆点,或几何或动画和许多其他东西,它工作得很好。参见Qt的图形视图框架文档和示例。
这是如何在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文档中QGraphicsScene
和QGraphicsView
的描述。你可以缩放视图来显示更多或更少的场景它可以放滚动条进去。我回答了一个相关的问题,在那里我展示了更多关于你可以用QGraphicsView
做什么,你可能也想看看。
您可以创建一个从QWidget
派生的自定义类,其中覆盖void paintEvent(QPaintEvent* event)
方法。在这种情况下,你把点放入某种点列表,std::vector<QPoint>
或QList<QPoint>
,然后用折线方法绘制它。例如:
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()));
}
有一个图表库qwt,它提供了用于绘制图表的Qt小部件。
Qt Charts, QML或GraphicsView
这将是我的QGraphics视图示例的更新,但它有点长,这确实是一个完全不同的方法来回答这个问题。
Qt Charts (LGPL自2016年起可用)是一个很好的方法,无需第三方库。
- https://doc.qt.io/qt-5/qtcharts-linechart-example.html
- http://blog.qt。io/博客/2016/01/18/qt-charts-2-1-0-release/
- https://doc.qt.io/qt-5/qtcharts-overview.html
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);
希望对你有帮助。
- 如何在QT中的自定义视频小工具t上绘制矩形
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 在 QT C++中绘制/操作多边形
- 在Qt C++中绘制HSV色轮
- 如何使用Qpainter在Qt中绘制棋盘
- 在 Qt C++ 中在自定义项委托上绘制文本时的性能问题
- Qt:用不同的字体绘制文本
- 在 QT 中重新绘制小部件
- 在表单 QT 上的小部件内绘制
- 绘制像素以在Qt中创建移动效果
- 我想在QT中实时绘制ADC图
- 尝试使用对象作为输入来绘制QT创建者
- 在Qt中绘制多个圆圈
- QT-从Combobox选择颜色并绘制矩形
- 通过在Android(和iOS)上使用QT绘制具有3D效果的2D线
- 如何绘制一条光滑的曲线,该线经过QT中的几个点
- 如何在QT中的框架上绘制
- QT在QGraphicsScene上绘制富文本
- 如何在本机C/C 中用QT绘制QR码
- QT在带有Qgraphics的线上绘制椭圆形或三角形