如題,在網上找了許多回答,依舊沒搞清楚自己問題出在哪。
我自定義了一個類(fool),加入到主視窗(widget)中的QTabwidget中。QTabwidget下有兩個tab,我在第一個tab下(widget1)加入了了這個自定義的類(fool ,在主視窗里名稱是shabi)。自定義的類里有我寫的畫圖相關的函式。但是程式運行的時候顯示不出來,求教是怎么回事。自定義的類fool和主視窗widget的代碼如下:
*有些代碼后面跟的注釋會有些數值上的誤差,請別在意
自定義類fool.h
#ifndef FOOL_H
#define FOOL_H
#include<QImage>
#include <QWidget>
#include<QPaintEvent>
#include<QPainter>
class fool : public QWidget
{
Q_OBJECT
public:
explicit fool(QWidget *parent = nullptr);
void XYPaint();
private:
QImage image;
protected:
void paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawImage(20,40,image);
}
signals:
};
#endif // FOOL_H
自定義類fool.cpp:
#include "fool.h"
#include<QPushButton>
#include<QPaintEvent>
#include<QPainter>
fool::fool(QWidget *parent) : QWidget(parent)
{
// QPushButton *btn = new QPushButton(this);
// btn->setGeometry(50,50,100,100);
//創建統計坐標系 QPainter實作
image=QImage(400,400,QImage::Format_RGB32);//畫布的初始化大小設為400*400,使用32位顏色
QColor backColor = qRgb(255,20,255); //畫布初始化背景色使用白色
image.fill(backColor);//對畫布進行填充
XYPaint();
}
void fool::XYPaint()
{
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing, true);//設定反鋸齒模式,好看一點
int pointx=20,pointy=375;//確定坐標軸起點坐標,這里定義(20,375)
int width=480-pointx,height=360;//確定坐標軸寬度跟高度 上文定義畫布為400X400,寬高依此而定。
//繪制坐標軸 坐標軸原點(20,375)
painter.drawLine(pointx,pointy,width+pointx,pointy);//坐標軸x寬度為width
painter.drawLine(pointx,pointy-height,pointx,pointy);//坐標軸y高度為height
painter.setPen(Qt::black);
painter.drawRect(0,0,520,400);//外圍的矩形
//繪制刻度
QPen penDegree;
penDegree.setColor(Qt::black);
penDegree.setWidth(2);
painter.setPen(penDegree);
painter.drawText(width+25,height+20,"次數");
painter.drawText(pointx-15,pointy-360,"輸出溫度(K)/壓強(Pa)");
//畫上x軸刻度線
for(int i=0;i<40;i++)//分成40份
{
//標注原點和末點
if(i == 0)
{ painter.drawText(pointx-5,pointy+15,QString::number(0));}
if(i == 39)
{ painter.drawText(pointx+(i+0.55)*width/40,pointy+15,QString::number(40));}
//選取合適的坐標,繪制一段長度為2的直線,用于表示刻度
painter.drawLine(pointx+(i+1)*width/40,pointy,pointx+(i+1)*width/40,pointy+2);
if(i == 0 || (i%4)==0)
{ painter.drawText(pointx+(i+0.55)*width/40,pointy+15,QString::number(i+1));}
}
主視窗widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include<QTabWidget>
#include<QWidget>
#include"fool.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QTabWidget *tabwidget = new QTabWidget(this);
//制作靜態坐標系TAB
QWidget *widget1 = new QWidget();
//制作動態坐標系TAB
QWidget *widget2 = new QWidget();
private:
Ui::Widget *ui;
protected:
};
#endif // WIDGET_H
主視窗widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include <QTabWidget>
#include "fool.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//tabwidget在頭檔案里
tabwidget->setFixedSize(600,400);
tabwidget->setGeometry(100,50,600,400);
tabwidget->setVisible(true);
fool *shabi = new fool(widget1);
shabi->show();
tabwidget->addTab(widget1,"jingtai");
tabwidget->addTab(widget2,"dongtai");
}
Widget::~Widget()
{
delete ui;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/240243.html
標籤:工具平臺和程序庫
下一篇:為什么少了注釋的那句輸出時就出錯
