首页 > 其他分享 >14、绘制图形(QPainter)

14、绘制图形(QPainter)

时间:2023-12-11 11:12:59浏览次数:24  
标签:Widget 14 PainterArea void QWidget comboboxShape include 绘制 QPainter

效果

 

// 定义一个新的类
#ifndef PAINTERAREA_H #define PAINTERAREA_H #include <QObject> #include <QWidget> //QPen 画笔是基本的图形对象,绘制直线、曲线、多边形等形状 #include <QPen> //QBrush 画刷是基本的图形对象,主要用于填充,比如矩形、多边形等形状 #include <QBrush> #include <QPainter> class PainterArea : public QWidget { Q_OBJECT public: explicit PainterArea(QWidget *parent = nullptr); // 绘制直线、长方形 enum shape{Line,Rectangle}; void setshape(shape);//次函数实现绘制形状 void setPen(QPen); void setBrush(QBrush); void paintEvent(QPaintEvent *event); //重绘事件(本来就有的函数) void setFillrule(Qt::FillRule); //填充规则 signals: public slots: private: shape shp; //形状 QPen pen; //画笔 QBrush qbrush; //画刷 Qt::FillRule fillrle; //规则 public slots: }; #endif // PAINTERAREA_H

 

//实现定的的新的类
#include "painterarea.h" PainterArea::PainterArea(QWidget *parent) : QWidget(parent) { //调色板来改变背景颜色 setPalette(QPalette(Qt::blue)); // 用于当前窗口是否需要绘制背景 setAutoFillBackground(true); //设置最小尺寸 setMinimumSize(400,400); } void PainterArea::setshape(shape sh){ shp=sh; update(); } void PainterArea::setPen(QPen sh) { pen=sh; update(); } void PainterArea::setBrush(QBrush sh) { qbrush = sh; update(); } void PainterArea::paintEvent(QPaintEvent *event) { QPainter p(this); p.setPen(pen); p.setBrush(qbrush); QRect rect(55,110,290,180); switch (shp) { case Line://实现直线 p.drawLine(rect.topLeft(),rect.bottomRight()); break; case Rectangle: p.drawRect(rect); break; default: break; } } void PainterArea::setFillrule(Qt::FillRule rle) { fillrle=rle; update();//重新绘制区域窗体 }
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "painterarea.h"
#include <QLabel>
#include <QGridLayout>
#include <QComboBox>
//颜色
#include <QColorDialog>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

private:
    PainterArea *labelshapeArea;
    QLabel *labelshap;
    QComboBox *comboboxShape;

    QGridLayout *glayout;

private slots:
    void dispShapeFunc(int);
};

#endif // WIDGET_H
#include "widget.h"
#include <QDebug>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    labelshapeArea=new PainterArea;

    glayout = new QGridLayout; //控制面板布局

    setWindowTitle("QT绘图框架测试(QPainter)类");

    labelshap = new QLabel("绘制形状");

    comboboxShape = new QComboBox;

    comboboxShape->addItem("Line",PainterArea::Line);
    comboboxShape->addItem("Rectangle",PainterArea::Rectangle);

    glayout->addWidget(labelshap,0,0);
    glayout->addWidget(comboboxShape,0,1);

    QHBoxLayout *mainLayout= new QHBoxLayout(this); //整体布局
    mainLayout->addWidget(labelshapeArea); //向布局 添加控件
    mainLayout->addLayout(glayout); //向布局添加布局

    connect(comboboxShape,SIGNAL(activated(int)),this,SLOT(dispShapeFunc(int)));
}

Widget::~Widget()
{

}

void Widget::dispShapeFunc(int v)
{
    PainterArea::shape sp=PainterArea::shape(comboboxShape->itemData(v,Qt::UserRole).toInt());
    qDebug() << sp;
    labelshapeArea->setshape(sp);
}

 

标签:Widget,14,PainterArea,void,QWidget,comboboxShape,include,绘制,QPainter
From: https://www.cnblogs.com/baisedeyu/p/17893898.html

相关文章

  • #2023-2024-1 20231408《计算机基础与程序设计》第十一周学习总结
    作业信息这个作业属于哪个课程<2023-2024-1-计算机基础与程序设计>这个作业要求在哪里<2023-2024-1计算机基础与程序设计第十一周作业>这个作业的目标<《计算机科学概论》第15,16章,《C语言程序设计》第10章,上周测试题>作业正文https://www.cnblogs.com/jfxyh06......
  • 2023-2024-1 20231418 《计算机基础与程序设计》第11周学习总结
    2023-2024-120231418《计算机基础与程序设计》第11周学习总结这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1计算机基础与程序设计第十一周作业这个作业的目标1.学习《计算机科学概论》第15,16章并完成云班课测试;2.学习《C......
  • Python 通过 akshare 轻松绘制股票中国平安K线图
    想通过Python和akshare绘制K线图,网上找了很多代码,放在Pycharm中都是无法正常运行绘制的,于是自己整理了下并调试成功。环境:python3.9(miniconda3)、Pycharm、Win10需要用的模块或者工具库:akshare(1.11.91)、pandas(2.1.1)、numpy(1.26.2)、matplotlib(3.8.2)、mplfinanc......
  • 2023-2024-1 学号20231427 《计算机基础与程序设计》第十一周学习总结
    #学期(如2023-2024-1)学号(如:20231300)《计算机基础与程序设计》第X周学习总结##作业信息|这个作业属于哪个课程|<班级的链接>(如https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/)||-- |-- ||这个作业要求在哪里|<作业要求的链接>(如https://www.cnblogs.com/rocedu/p/95......
  • 2023-2024-1 20231406 《计算机基础与程序设计》第十一周学习总结
    2023-2024-120231406《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第十一周作业这个作业的目标自学计算机科学概论第15,16章并完成云班课测试,自学......
  • Codeforces Round 914 (Div. 2)
    CodeforcesRound914(Div.2)A.Forked!#include<bits/stdc++.h>#defineendl'\n'#defineintlonglongusingnamespacestd;voidsolve(){inta,b;intx,y;cin>>a>>b>>x>>y;map<pair<int,in......
  • 2023-2024-1 20231412 《计算机基础与程序设计》第十一周学习总结
    2023-2024-120231412《计算机基础与程序设计》第周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13007这个作业的目标《计......
  • 2023-2024-1 20231416《计算机基础与程序设计》第十一周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第十一周作业)这个作业的目标自学《计算机科学概论》第15,16章,《C语言程序设计》第10章作业正文https://www.cnblogs.com/shansh......
  • 2023-2024-1 20231422 《计算机基础与程序设计》第十一周总结报告
    这个作业属于哪个课程2023-2024-计算机基础与程序设计这个作业要求在哪里2023-2024-计算机基础与程序设计这个作业的目标《计算机科学概论》第15,16章、《C语言程序设计》第10章作业正文(https://www.cnblogs.com/Augenstern4545/p/17892992.html)教材学习内容......
  • P1439-DP【绿】
    轻敌了啊...题目一共只有几句话但我却忽略了一个重大信息...总之我显示写出了时空复杂度都是n^2级别的朴素递推算法,这没什么,基本功而已,然后50分我试了试滚动数组,把空间复杂度降到了n级别,但没什么用,解决了MLE但仍然TLE。后来我想到记搜应该能算的更快,毕竟有些用不到的点用搜索就......