当前位置:编程学习 > wap >>

qt绘图-高分求解

请问在qt中,这样复杂的图怎么花。因为他是有好几个图在一个页面,所以我必须要使用控件绘图吧,这样可以规定他在一个区域显示。我知道mfc中可以再一个控件中绘图,但是在qt中貌似不好实现。我听说可以用qwt,是不是一定要用,qt绘图一般使用什么东西,是不是纯手工包括横线竖线网格都是自己画的。 Qt 绘图 --------------------编程问答-------------------- Qt没有现成的,上面的控件, QWT可以把他的坐标系统扣出来用。 

所以,基本上还是自己定义多个控件自己绘制。 --------------------编程问答-------------------- 要自己绘制的,没有现成的 --------------------编程问答--------------------
引用 1 楼 allencui0313 的回复:
Qt没有现成的,上面的控件, QWT可以把他的坐标系统扣出来用。 

所以,基本上还是自己定义多个控件自己绘制。
是不是说不用控件 直接定义区域让后在区域中画横线竖线 --------------------编程问答--------------------
引用 2 楼 cai6811376 的回复:
要自己绘制的,没有现成的
是不是说不用控件 直接定义区域让后在区域中画横线竖线。还是有专门的控件 --------------------编程问答--------------------
引用 4 楼 yediguhong 的回复:
Quote: 引用 2 楼 cai6811376 的回复:

要自己绘制的,没有现成的
是不是说不用控件 直接定义区域让后在区域中画横线竖线。还是有专门的控件
自己绘制~没有专门的控件。 --------------------编程问答--------------------
引用 5 楼 allencui0313 的回复:
自己绘制~没有专门的控件。
嘿嘿 那qwt是干嘛的 不是可以在上面绘图的嘛 有点啰嗦不好意思 --------------------编程问答-------------------- 左下角有三维图形,可能需要用到OpenGL。 --------------------编程问答-------------------- 就剩QPainter可用了。 --------------------编程问答-------------------- paintEvent事件里绘制即可 --------------------编程问答--------------------
引用 6 楼 yediguhong 的回复:
Quote: 引用 5 楼 allencui0313 的回复:

自己绘制~没有专门的控件。
嘿嘿 那qwt是干嘛的 不是可以在上面绘图的嘛 有点啰嗦不好意思

o, QWT可以下下来编一下,里面有些他自己定义的控件和一些坐标系系统,QWT自带了很多example, 看看哪些功能是你需要的,所以你还还要好好研究下QWT,QWT还是很强大的。 --------------------编程问答-------------------- 首先,这种界面并不复杂,你把每个图都想象成一个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,也就是说自己实现一个控件。
在每个Widget里再分一下固定的元素(包括)和动态刷新的元素。固定的元素在paintEvent里用固定的方法画上去。动态刷新的部分,通过消息发送给Widget,然后在刷新窗口,在paintEvent里条件画出不同的内容。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 用QPainter和MFC的GDI+是一个原理,MFC可以做到的QT一样可以做到。 --------------------编程问答--------------------
引用 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里面的话打开软件的时候绘图区域将是一片空白,只有运行的时候才会出现,就有点不合要求啊 --------------------编程问答--------------------
引用 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里面的话打开软件的时候绘图区域将是一片空白,只有运行的时候才会出现,就有点不合要求啊

只能说你对这个绘图完全不了解,先去看看书,再来理解我说的。
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,