成品图:
具体代码、步骤:
1、创建一个项目,基类选择 QMainWindow
2、添加一个新的类,右击项目文件,Add New,
- 选择c++ Class,
- 基类选择QWidget ,下面选项会自动勾选
- 定义好类名字
————这样就算完成了————
代码部分
drawwidget.h
#ifndef DRAWWIDGET_H
#define DRAWWIDGET_H
#include <QWidget>
#include <QtGui>
#include <QMouseEvent> // 鼠标事件
#include <QPaintEvent> // 绘制事件
#include <QResizeEvent> // 实时获取窗口操作等大小
#include <QColor>
#include <QPixmap> //显示图像,它用于表示图像和图片,并且提供了操作这些图像的方法
#include <QPainter>
#include <QPalette> //调色板
#include <QPen>
class DrawWidget : public QWidget
{
Q_OBJECT
public:
explicit DrawWidget(QWidget *parent = nullptr);
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
void paintEvent(QPaintEvent *);
void resizeEvent(QResizeEvent *);
signals:
public slots:
void setStyle(int); // 设置线风格
void setWidth(int); // 设置线宽度
void setColor(QColor); // 设置线颜色
void clearFunc(); // 清除函数
private:
QPixmap *pix; // 在屏幕上显示图像而设计和优化
QPoint startpos; //画笔起点的位置
QPoint endPos; //画笔终点的位置
int style,widthss;
QColor color;
};
#endif // DRAWWIDGET_H
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QComboBox>
#include <QToolButton>
#include <QSpinBox> //它提供了一个可以编辑的数字输入控件,
//通常用于允许用户通过点击按钮或使用键盘上的箭头键来选择一个整数值
#include "drawwidget.h"
#include <QGridLayout>
#include <QColorDialog>
#include <QToolBar>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void CreateToolBarFunc(); // 创建工具条
private:
DrawWidget *drawWidget;
QGridLayout *glayout;
QLabel *labelstyle;
QComboBox *comboboxlabelstyle;
QLabel *labelwidth;
QSpinBox *spinboxlabelwidth;
QToolButton *colorbutton;
QToolButton *clearbutton;
private slots:
void dispstyle();
void dispcolor();
};
#endif // MAINWINDOW_H
drawwidget.cpp
#include "drawwidget.h"
DrawWidget::DrawWidget(QWidget *parent) : QWidget(parent)
{
setAutoFillBackground(true);
setPalette(QPalette(Qt::white));
pix=new QPixmap(size());
pix->fill(Qt::white);
// 设置绘制区窗口最小尺寸
setMinimumSize(600,400);
}
void DrawWidget::setStyle(int s) // 设置线风格
{
style=s;
}
void DrawWidget::setWidth(int w) // 设置线宽度
{
widthss=w;
}
void DrawWidget::setColor(QColor c) // 设置线颜色
{
color=c;
}
void DrawWidget::clearFunc() // 清除函数
{
QPixmap *cPix=new QPixmap(size());
cPix->fill(Qt::white);
pix=cPix;
update();
}
void DrawWidget::mousePressEvent(QMouseEvent *e)
{
startpos=e->pos();
}
void DrawWidget::mouseMoveEvent(QMouseEvent *e)
{
QPainter *painter=new QPainter;
QPen pen;
pen.setStyle((Qt::PenStyle)style);
pen.setWidth(widthss);
pen.setColor(color);
painter->begin(pix);
painter->setPen(pen);
painter->drawLine(startpos,e->pos());
painter->end();
startpos=e->pos();
update();
}
void DrawWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(QPoint(0,0),*pix);
}
void DrawWidget::resizeEvent(QResizeEvent *event)
{
if(height()>pix->height() || width()>pix->width())
{
QPixmap *newPix=new QPixmap(size());
newPix->fill(Qt::white);
QPainter ps(newPix);
ps.drawPixmap(QPoint(0,0),*pix);
pix=newPix;
}
QWidget::resizeEvent(event);
}
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QIcon icon("E:\\test.jpg"); //设置窗口左上角图标
setWindowIcon(icon);
setWindowTitle("画板"); //设置窗口名字
drawWidget=new DrawWidget;
setCentralWidget(drawWidget); // 将刚才创建对象作为主窗口的中心窗口
CreateToolBarFunc(); // 调用此函数实现创建工具栏
setMinimumSize(600,400);
dispstyle();
drawWidget->setWidth(spinboxlabelwidth->value()); // 初始化线宽度
drawWidget->setColor(Qt::black); // 初始化线颜色
}
MainWindow::~MainWindow()
{
}
void MainWindow::CreateToolBarFunc() // 创建工具条
{
QToolBar *toolBar=addToolBar("Tool");
labelstyle=new QLabel("线型风格:");
comboboxlabelstyle=new QComboBox;
comboboxlabelstyle->addItem("SolidLine",static_cast<int>(Qt::SolidLine)); // 实线
comboboxlabelstyle->addItem("DashLine",static_cast<int>(Qt::DashLine));
comboboxlabelstyle->addItem("DashDotDotLine",static_cast<int>(Qt::DashDotDotLine));
comboboxlabelstyle->addItem("DotLine",static_cast<int>(Qt::DotLine)); // 虚线
connect(comboboxlabelstyle,SIGNAL(activated(int)),this,SLOT(dispstyle()));
labelwidth=new QLabel("线型宽度:");
spinboxlabelwidth=new QSpinBox;
connect(spinboxlabelwidth,SIGNAL(valueChanged(int)),drawWidget,SLOT(setWidth(int)));
colorbutton=new QToolButton;
QPixmap pixmap(20,20);
pixmap.fill(Qt::black);
colorbutton->setIcon(QIcon(pixmap));
connect(colorbutton,SIGNAL(clicked()),this,SLOT(dispcolor()));
clearbutton=new QToolButton;
clearbutton->setText("一键清除按钮");
connect(clearbutton,SIGNAL(clicked()),drawWidget,SLOT(clearFunc()));
toolBar->addWidget(labelstyle);
toolBar->addWidget(comboboxlabelstyle);
toolBar->addWidget(labelwidth);
toolBar->addWidget(spinboxlabelwidth);
toolBar->addWidget(colorbutton);
toolBar->addWidget(clearbutton);
}
void MainWindow::dispstyle()
{
drawWidget->setStyle(comboboxlabelstyle->itemData(comboboxlabelstyle->currentIndex(),
Qt::UserRole).toInt());
}
void MainWindow::dispcolor()
{
QColor color=QColorDialog::getColor(static_cast<int>(Qt::black),this);
if(color.isValid())
{
drawWidget->setColor(color);
QPixmap ps(20,20);
ps.fill(color);
}
}
最后点击左下角的运行就可以啦
gg :推荐课程https://xxetb.xetslk.com/s/kNPSd