在QT子窗口中画图的简要总结

版权声明:本博客内容为原创,若要转载,请注明出处!否则禁止转载! https://blog.csdn.net/wardenjohn/article/details/80247072

我还是个小白,现在在写这篇博客只是害怕我会忘记,但时候又要重新开始再来一遍是很浪费时间的,所以就简单的总结一下我今天学到的东西吧。

今天要解决的问题主要是怎么样使得在QT上好像是在java上画图一样呢?其实是可以的。

首先,创建一个新的子窗口,是要是QWidget类型的窗口

新建一个窗口的头文件:

#ifndef BP_H
#define BP_H

#include "mainwindow.h"
#include <QMainWindow>
#include <QDialog>
#include <iostream>
#include <vector>
#include <queue>

namespace Ui {
    class bp;
}

class bp : public QWidget{
    Q_OBJECT
public:
    explicit bp(QWidget *parent = 0);
    ~bp();
    void paint_line(QPaintEvent *event);
private:
    Ui::bp *ui;
    int draw=1;
    void paintEvent(QPaintEvent *);
public slots:
    void start();

};

#endif // BP_H

承上一篇使用ui的文章,这里我放出这个文件的cpp实现

#include "bp.h"
#include "ui_bp.h"
#include <iostream>
#include <QPainter>
bp::bp(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::bp)
{
    ui->setupUi(this);
    setWindowTitle("BP神经网络");
    connect(ui->start,SIGNAL(clicked()),this,SLOT(start()));
    connect(ui->close,SIGNAL(clicked()),this,SLOT(close()));
}

bp::~bp()
{
    delete ui;
}

void bp::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);
    // 设置画笔颜色
    painter.setPen(QColor(0, 160, 230));
    // 绘制直线
    painter.drawLine(QPointF(0, height()/draw), QPointF(width() /draw, height() /draw));

}

void bp::start()
{
    std::cout<<"hello"<<std::endl;
//    QPainter p;
//    p.drawLine(QPointF(0,height()),QPointF(width()/2,height()/2));
    draw += 1;
    update();
}

接下来就是说说里面的东西了。虽然还不知道现在这样的实现符不符合我将来项目的需求,但是这是一个前进的方向。

start是一个按钮的槽函数,在子窗口打开的时候,程序就会自动的执行paintEvent里面的语句,一开始我运行的时候就崩溃掉了,想了一下以后发现,我在初始化draw的时候初始化为0了,导致在计算的时候,除0,所以崩溃哦

所以我把draw初始化成1,在每一次按下start的时候,会执行update()函数,重新画图,为了显示出有运行,我的分分母发生了变化,实验结果显示,在我每一次按下了start以后,paintEvent就会重新画图。也就是说将来只需要在别的地方准备好数据以后,在paintEvent里面使用的话,在数据处理好了以后,直接update()就可以更新了


不知道是不是符合项目要求,将来会更新

猜你喜欢

转载自blog.csdn.net/wardenjohn/article/details/80247072
今日推荐