我还是个小白,现在在写这篇博客只是害怕我会忘记,但时候又要重新开始再来一遍是很浪费时间的,所以就简单的总结一下我今天学到的东西吧。
今天要解决的问题主要是怎么样使得在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()就可以更新了
不知道是不是符合项目要求,将来会更新