在QT子視窗中畫圖的簡要總結
阿新 • • 發佈:2018-11-14
我還是個小白,現在在寫這篇部落格只是害怕我會忘記,但時候又要重新開始再來一遍是很浪費時間的,所以就簡單的總結一下我今天學到的東西吧。
今天要解決的問題主要是怎麼樣使得在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()就可以更新了
不知道是不是符合專案要求,將來會更新