[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。
首先,这种界面并不复杂,你把每个图都想象成一个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。
引用 5 楼 allencui0313 的回复:自己绘制~没有专门的控件。嘿嘿 那qwt是干嘛的 不是可以在上面绘图的嘛 有点啰嗦不好意思
自己绘制~没有专门的控件。
引用 2 楼 cai6811376 的回复:要自己绘制的,没有现成的是不是说不用控件 直接定义区域让后在区域中画横线竖线。还是有专门的控件
要自己绘制的,没有现成的
Qt没有现成的,上面的控件, QWT可以把他的坐标系统扣出来用。 所以,基本上还是自己定义多个控件自己绘制。
16,216
社区成员
26,595
社区内容
加载中
试试用AI创作助手写篇文章吧