qt绘图-高分求解

yediguhong 2013-06-17 03:47:01
请问在qt中,这样复杂的图怎么花。因为他是有好几个图在一个页面,所以我必须要使用控件绘图吧,这样可以规定他在一个区域显示。我知道mfc中可以再一个控件中绘图,但是在qt中貌似不好实现。我听说可以用qwt,是不是一定要用,qt绘图一般使用什么东西,是不是纯手工包括横线竖线网格都是自己画的。
...全文
362 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
pbe_sedm 2013-07-07
  • 打赏
  • 举报
回复
引用 15 楼 yediguhong 的回复:
[quote=引用 11 楼 pbe_sedm 的回复:] 首先,这种界面并不复杂,你把每个图都想象成一个QWidget,剩下的就是把这些QWidget排一下版了。 Qt排版分两种,使用布局来排版和手动排版。 Qt提供的布局类有:QVBoxLayout、QHBoxLayout、QGridLayout等等。 使用布局类来排版的话,控件的位置和大小就不由你控制了,像楼主给的图这种排版就必须使用手动排版了,手动排版的方法就是在实例化对象的时候一般都有 QWidget *parent 这个参数,即指定该对象的父窗口是谁,该对象会现出在父窗口的,通过对象的 move()、setGeometry()、resize()等方法来调整对象的位置,大小。 每个图你都得自己来绘制,且都派生自QWidget类。自己绘制控件基本方法: class A : public QWidget { public: explicit A(QWidget *parent = 0) : QWidget(parent) {} protected: void paintEvent(QPaintEvent * event) { QPainter painter(this); // 绘图 ... } }; 如果控件的显示是动态的(类似于windows任务管理器中的cpu和内存利用率图),则一般会出现两种情况,多线程方式和单线程方式。 如果是多线程的,则会涉及到数据的同步问题,但也不会有多复杂,Qt提供了 QMutex 类。 如果是单线程的,则问题就更简单了,将数据处理好后,调用 update() 方法,该方法会触发控件进行重绘操作,即通知系统调用 paintEvent() 方法。 对于绘制二维图,Qt提供了相当强大的API。
那每个widget里面的条条杠杠是不是可以用qt designer画呢,还是要在qpainter里面绘制。如果是在qpainter里面的话打开软件的时候绘图区域将是一片空白,只有运行的时候才会出现,就有点不合要求啊[/quote] 只能说你对这个绘图完全不了解,先去看看书,再来理解我说的。
yediguhong 2013-07-06
  • 打赏
  • 举报
回复
引用 11 楼 pbe_sedm 的回复:
首先,这种界面并不复杂,你把每个图都想象成一个QWidget,剩下的就是把这些QWidget排一下版了。 Qt排版分两种,使用布局来排版和手动排版。 Qt提供的布局类有:QVBoxLayout、QHBoxLayout、QGridLayout等等。 使用布局类来排版的话,控件的位置和大小就不由你控制了,像楼主给的图这种排版就必须使用手动排版了,手动排版的方法就是在实例化对象的时候一般都有 QWidget *parent 这个参数,即指定该对象的父窗口是谁,该对象会现出在父窗口的,通过对象的 move()、setGeometry()、resize()等方法来调整对象的位置,大小。 每个图你都得自己来绘制,且都派生自QWidget类。自己绘制控件基本方法: class A : public QWidget { public: explicit A(QWidget *parent = 0) : QWidget(parent) {} protected: void paintEvent(QPaintEvent * event) { QPainter painter(this); // 绘图 ... } }; 如果控件的显示是动态的(类似于windows任务管理器中的cpu和内存利用率图),则一般会出现两种情况,多线程方式和单线程方式。 如果是多线程的,则会涉及到数据的同步问题,但也不会有多复杂,Qt提供了 QMutex 类。 如果是单线程的,则问题就更简单了,将数据处理好后,调用 update() 方法,该方法会触发控件进行重绘操作,即通知系统调用 paintEvent() 方法。 对于绘制二维图,Qt提供了相当强大的API。
那每个widget里面的条条杠杠是不是可以用qt designer画呢,还是要在qpainter里面绘制。如果是在qpainter里面的话打开软件的时候绘图区域将是一片空白,只有运行的时候才会出现,就有点不合要求啊
wangeen 2013-06-24
  • 打赏
  • 举报
回复
用QPainter和MFC的GDI+是一个原理,MFC可以做到的QT一样可以做到。
rzsheng 2013-06-19
  • 打赏
  • 举报
回复
这个图看起来复杂,其实实现起来也很简单, 分几个区域,每个区域自己写一个Widget,也就是说自己实现一个控件。 在每个Widget里再分一下固定的元素(包括)和动态刷新的元素。固定的元素在paintEvent里用固定的方法画上去。动态刷新的部分,通过消息发送给Widget,然后在刷新窗口,在paintEvent里条件画出不同的内容。
pbe_sedm 2013-06-18
  • 打赏
  • 举报
回复
首先,这种界面并不复杂,你把每个图都想象成一个QWidget,剩下的就是把这些QWidget排一下版了。 Qt排版分两种,使用布局来排版和手动排版。 Qt提供的布局类有:QVBoxLayout、QHBoxLayout、QGridLayout等等。 使用布局类来排版的话,控件的位置和大小就不由你控制了,像楼主给的图这种排版就必须使用手动排版了,手动排版的方法就是在实例化对象的时候一般都有 QWidget *parent 这个参数,即指定该对象的父窗口是谁,该对象会现出在父窗口的,通过对象的 move()、setGeometry()、resize()等方法来调整对象的位置,大小。 每个图你都得自己来绘制,且都派生自QWidget类。自己绘制控件基本方法: class A : public QWidget { public: explicit A(QWidget *parent = 0) : QWidget(parent) {} protected: void paintEvent(QPaintEvent * event) { QPainter painter(this); // 绘图 ... } }; 如果控件的显示是动态的(类似于windows任务管理器中的cpu和内存利用率图),则一般会出现两种情况,多线程方式和单线程方式。 如果是多线程的,则会涉及到数据的同步问题,但也不会有多复杂,Qt提供了 QMutex 类。 如果是单线程的,则问题就更简单了,将数据处理好后,调用 update() 方法,该方法会触发控件进行重绘操作,即通知系统调用 paintEvent() 方法。 对于绘制二维图,Qt提供了相当强大的API。
  • 打赏
  • 举报
回复
引用 6 楼 yediguhong 的回复:
引用 5 楼 allencui0313 的回复:
自己绘制~没有专门的控件。
嘿嘿 那qwt是干嘛的 不是可以在上面绘图的嘛 有点啰嗦不好意思
o, QWT可以下下来编一下,里面有些他自己定义的控件和一些坐标系系统,QWT自带了很多example, 看看哪些功能是你需要的,所以你还还要好好研究下QWT,QWT还是很强大的。
  • 打赏
  • 举报
回复
paintEvent事件里绘制即可
jdwx 2013-06-17
  • 打赏
  • 举报
回复
就剩QPainter可用了。
彩阳 2013-06-17
  • 打赏
  • 举报
回复
左下角有三维图形,可能需要用到OpenGL。
yediguhong 2013-06-17
  • 打赏
  • 举报
回复
引用 5 楼 allencui0313 的回复:
自己绘制~没有专门的控件。
嘿嘿 那qwt是干嘛的 不是可以在上面绘图的嘛 有点啰嗦不好意思
  • 打赏
  • 举报
回复
引用 4 楼 yediguhong 的回复:
引用 2 楼 cai6811376 的回复:
要自己绘制的,没有现成的
是不是说不用控件 直接定义区域让后在区域中画横线竖线。还是有专门的控件
自己绘制~没有专门的控件。
yediguhong 2013-06-17
  • 打赏
  • 举报
回复
引用 2 楼 cai6811376 的回复:
要自己绘制的,没有现成的
是不是说不用控件 直接定义区域让后在区域中画横线竖线。还是有专门的控件
yediguhong 2013-06-17
  • 打赏
  • 举报
回复
引用 1 楼 allencui0313 的回复:
Qt没有现成的,上面的控件, QWT可以把他的坐标系统扣出来用。 所以,基本上还是自己定义多个控件自己绘制。
是不是说不用控件 直接定义区域让后在区域中画横线竖线
xcyl 2013-06-17
  • 打赏
  • 举报
回复
要自己绘制的,没有现成的
  • 打赏
  • 举报
回复
Qt没有现成的,上面的控件, QWT可以把他的坐标系统扣出来用。 所以,基本上还是自己定义多个控件自己绘制。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧