1. 程式人生 > >在QT子視窗中畫圖的簡要總結

在QT子視窗中畫圖的簡要總結

我還是個小白,現在在寫這篇部落格只是害怕我會忘記,但時候又要重新開始再來一遍是很浪費時間的,所以就簡單的總結一下我今天學到的東西吧。

今天要解決的問題主要是怎麼樣使得在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()就可以更新了


不知道是不是符合專案要求,將來會更新