首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QT在MainWindow中使用Widget画网格曲线

2013-08-09 
QT在MainWindow中应用Widget画网格曲线我正在MainWindow中添加了个Widget,(ˇ?ˇ) 想~在Widget中画网格,画曲

QT在MainWindow中应用Widget画网格曲线
我正在MainWindow中添加了个Widget,(ˇ?ˇ) 想~在Widget中画网格,画曲线,但是不知道怎么写Painter的指针,不太会用PaintEvent,这个Widget应该怎么用啊QT在MainWindow中使用Widget画网格曲线
[解决办法]
基本上没用过Designer,手残的坚持纯手工……,
下面是我测试你的plotter的代码和截图,



// class plotrer 基本没做改动,只是改了MainWindow让我能编译
// plotter.h
class plotter : public QWidget
{
Q_OBJECT// 你的源代码里居然没有这行,这到还行
public:// 没有这行你怎么编译的???
    plotter(QWidget *parent=0);
private:
    void paintEvent(QPaintEvent *event);
    void drawGrid(QPainter *);
};

// plotter.cpp
plotter::plotter(QWidget *parent):QWidget(parent)
{
}

void plotter::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    drawGrid(&painter);
    painter.setPen(Qt::black);
    painter.drawLine(0,0,100,100);

}

void plotter::drawGrid(QPainter *painter)
{

    painter->drawLine(0,0,100,100);
    int Margin=40;//边缘
        QRect rect;
        //取得绘图区域,大小要减去旁白
        //rect=QRect(Margin+300,Margin+300,width()-Margin-700,height()-Margin-500);
        rect=QRect(Margin+25,Margin,width()-2*Margin-10,height()-2*Margin);
        for(int i=0;i<=20;i++)
        {
        int x=rect.left()+(i*(rect.width()-1)/20);
        painter->drawLine(x,rect.top(),x,rect.bottom());
        }
        for(int j=0;j<=10;j++)
        {
            int y=rect.bottom()-(j*(rect.height()-1)/10);
            painter->drawLine(rect.left()-5,y,rect.right(),y);


        }

}

// mainwindow.h
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
plotter *plot;
};

// mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
this->plot = new plotter;
this->setCentralWidget(this->plot);
}

MainWindow::~MainWindow()
{
}




QT在MainWindow中使用Widget画网格曲线

所以你的plotter是没有问题的,而你的UI Designer有没有问题就看不到了,重新试试吧,可以尝试一下用纯代码来~~
[解决办法]
引用:
Quote: 引用:


从代码里找,有没有显式的add,布局有没有什么问题,基本上我调试的过程就是这样。

用了你的方法,确实跟你的运行结果相同。不过我本来的目的是在MainWindow的大窗口下用一个Widget的控件来画网格,这样我调节Widget的位置来控制网格曲线在哪儿显示。现在的运行结果是MainWindow的整个centrWidget都给了Widget,我要想通过控制控件来调节不好弄了。
请问你有什么建议吗?


不太懂楼主的设计思路,我的代码只是帮助楼主测试了一下plotter,表示plotter没有问题,问题出在其他的地方。调节Widget的位置控制网格曲线在哪儿显示?我觉得应该是直接绘制到要显示的位置吧。要是想要调整控件的话,一般再套一层Widget,结构可以参考 将一堆组件组成MainWidget一个整体,然后放到MainWindow。我的代码只是为了测试,一般没有直接在MainWindow上添加底层组件的。

热点排行