223_QT_一个单独自写的画笔对话框,有画笔样式、画笔颜色、画笔粗细3个选择

65 篇文章 6 订阅

代码

头文件

#ifndef DIALOGPEN_H
#define DIALOGPEN_H

#include <QDialog>
#include <QPen>
namespace Ui {
class DialogPen;
}

class DialogPen : public QDialog
{
    Q_OBJECT

public:
    explicit DialogPen(QWidget *parent = nullptr);
    ~DialogPen();

     QPen getpen() ;
     static QPen getPen(QPen initPen, bool &ok);/*使用的qpen自带的函数*/
    void setPen(const QPen &newPen);

private slots:
    void on_btnColor_clicked();

private:
    Ui::DialogPen *ui;
    QPen m_pen;
};

#endif // DIALOGPEN_H

主程序

#include "dialogpen.h"
#include "ui_dialogpen.h"
#include <QColorDialog>
#include <QPalette>

DialogPen::DialogPen(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogPen)
{
    ui->setupUi(this);

    //   笔的类型
    //“线型”ComboBox的选择项设置
    ui->comboPenStyle->clear();
    ui->comboPenStyle->addItem("NoPen",0);
    ui->comboPenStyle->addItem("SolidLine",1);
    ui->comboPenStyle->addItem("DashLine",2);
    ui->comboPenStyle->addItem("DotLine",3);
    ui->comboPenStyle->addItem("DashDotLine",4);
    ui->comboPenStyle->addItem("DashDotDotLine",5);
    ui->comboPenStyle->addItem("CustomDashLine",6);
    ui->comboPenStyle->setCurrentIndex(1);
}

DialogPen::~DialogPen()
{
    delete ui;
}

/*颜色按钮--把颜色对话框中选中的颜色显示到按钮上*/
void DialogPen::on_btnColor_clicked()
{
    QColor color = m_pen.color();
    color =  QColorDialog::getColor(color);
    if (color.isValid())
    {
        QString str = QString::asprintf("background-color:rgb(%d,%d,%d)", color.red(), color.green(), color.blue());/*背景颜色*/
        /*把颜色对话框中选中的颜色显示到按钮上*/
        ui->btnColor->setStyleSheet(str);
    }
}

/*
 * 从界面拿取设置好的变量,给到调用此函数的地方,比如mainwindow.cpp中
*/
QPen DialogPen::getpen()
{
    m_pen.setStyle(Qt::PenStyle( ui->comboPenStyle->currentIndex() ) );/*线形BOX的索引*/
    m_pen.setWidth(ui->spinWidth->value());/*线宽*/

    QColor color;
    color = ui->btnColor->palette().color(QPalette::Button);/*获取到按钮上显示的颜色*/
    m_pen.setColor(color);
    return m_pen;
}

/*
 * 静态函数只能被自己内部使用,与类同步创建,进入运行界面,立即先获取一次画笔样式
*/
QPen DialogPen::getPen(QPen initPen, bool &ok)
{
    DialogPen * dlg = new  DialogPen;
    dlg->setPen(initPen);/*进入运行界面,获取到的画笔样式设置进去*/
    int ret = dlg->exec();

    QPen    pen;
    if(ret == QDialog::Accepted)/*都是和枚举量进行比较*/
    {
       /*负责被其他文件调用,点击确定,将上面设置的画笔样式,拿取,给到临时变量pen*/
        pen = dlg->getpen();
        ok = true;
    }
    else
    {
        pen = initPen;
        ok = false;
    }

    delete  dlg;
    dlg = NULL;
    /*返回画笔样式,当再次进入到画笔对话框的时候,又再次被自己使用*/
    return pen;
}

/*画笔界面的所有样式设置,被静态getPen所调用*/
void DialogPen::setPen(const QPen &newPen)
{
    m_pen = newPen;
    ui->spinWidth->setValue(newPen.width());
    int i = static_cast<int>(newPen.style()) ;/*画笔的样式*/
    ui->comboPenStyle->setCurrentIndex(i);/*拿到第i个线形样式*/
    ui->btnColor->setAutoFillBackground(true);/*此属性保存小部件背景是否自动填充  */

    QColor color = newPen.color();
    QString str = QString::asprintf("background-color:rgb(%d,%d,%d)",
                                    color.red(), color.green(), color.blue());
    ui->btnColor->setStyleSheet(str);
}


图示

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扳手的海角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值