代码
头文件
#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);
}
图示