#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QColorDialog>
#include <QButtonGroup>
#include <QCursor>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
InitParam();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::InitParam()
{
m_bPenPress = true;
SetIconForButton();
CreateMenuBar();
SetBtnExclusive();
//设置scrollArea区域不能调整,当内部显示区域超过此区域时就会出现滚动条
ui->scrollArea->setWidgetResizable(false);
//滑动条信号槽
connect(ui->slider, SIGNAL(valueChanged(int)), this, SLOT(SetPenOrEaraserSize()));
//颜色按钮信号槽
connect(ui->btnColor, SIGNAL(clicked(bool)), this, SLOT(SetPenColor()));
//橡皮擦按钮信号槽
connect(ui->btnEaraser, SIGNAL(clicked(bool)), this, SLOT(SetEaraser()));
//画笔按钮信号槽
connect(ui->btnPen, SIGNAL(clicked(bool)), this, SLOT(SetPen()));
//部件事件过滤的注册
ui->image->installEventFilter(this);
}
void MainWindow::CreateMenuBar()
{
//获取菜单栏句柄
QMenuBar* m_menuBar= this->menuBar();
//添加一级菜单
QMenu* m1 = m_menuBar->addMenu("文件");
//添加二级菜单
QAction* a21 = m1->addAction("Open");
QAction* a22 = m1->addAction("Save");
//设置二级菜单的快捷键
a21->setShortcut(QKeySequence("Ctrl+O"));
a22->setShortcut(QKeySequence("Ctrl+S"));
//添加打开/保存菜单的信号槽
connect(a21, SIGNAL(triggered()), ui->image, SLOT(Open()));
connect(a22, SIGNAL(triggered()), ui->image, SLOT(Save()));
}
void MainWindow::SetIconForButton()
{
//为按钮设置图标
ui->btnPen->setIcon(QIcon(":/images/Resource/pen.png"));
ui->btnPen->setIconSize(QSize(ui->btnPen->width(), ui->btnPen->height()));
ui->btnEaraser->setIcon(QIcon(":/images/Resource/eraser.png"));
ui->btnEaraser->setIconSize(QSize(ui->btnEaraser->width(), ui->btnEaraser->height()));
//为颜色按钮设置颜色
QString strstyle = "background-color: rgba(255, 28, 107, 200)";
ui->btnColor->setStyleSheet(strstyle);
}
void MainWindow::SetBtnExclusive()
{
//设置按钮的排他属性
QButtonGroup *gp = new QButtonGroup(this);
gp->addButton(ui->btnPen);
gp->addButton(ui->btnEaraser);
gp->setExclusive(true);
}
//选中画笔
void MainWindow::SetPen()
{
ui->image->SetPenSize(ui->slider->value());
ui->btnPen->setChecked(true);
m_bPenPress = true;
}
//设置画笔或是橡皮擦的大小
void MainWindow::SetPenOrEaraserSize()
{
if(m_bPenPress)
{
ui->image->SetPenSize(ui->slider->value());
}
else
{
ui->image->SetEraser(ui->slider->value());
}
}
//设置画笔颜色
void MainWindow::SetPenColor()
{
if(m_bPenPress)
{
ui->image->SetPenColor(QColorDialog::getColor(QColor(255, 28, 107, 200), this), ui->btnColor);
}
}
//选中橡皮擦
void MainWindow::SetEaraser()
{
ui->image->SetEraser(ui->slider->value());
ui->btnEaraser->setChecked(true);
m_bPenPress = false;
}
bool MainWindow::eventFilter(QObject *watched, QEvent *ev)
{
if(ui->image == watched){
if(QEvent::Enter == ev->type()){
SetCursor();
}else if(QEvent::Leave == ev->type()){
setCursor(Qt::ArrowCursor);
}
}
return QObject::eventFilter(watched, ev);
}
void MainWindow::SetCursor()
{
QCursor *myCursor = nullptr;
if(m_bPenPress)
{
myCursor = new QCursor(QPixmap(":/images/Resource/pen.png"),20,44);
}
else
{
myCursor = new QCursor(QPixmap(":/images/Resource/eraser.png"),2,36);
}
setCursor(*myCursor);
}