本项目为一个使用Qt框架编写的C++绘图应用程序,提供丰富的绘图功能,并包含完整源码和可执行文件。适合学习与参考。
以下是代码的简化版本:
```cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 给pixmap赋值并设置背景色
pixmap = new QPixmap(900, 600);
pixmap->fill(Qt::white);
// 根据pixmap创建一个qpainter,并将控件添加到UI中
painter= new QPainter(pixmap);
ui->pixmap_label->setPixmap(*pixmap);
// 初始化填充颜色下拉框并关联信号和槽函数
connect(ui->linecolor_r_slider, SIGNAL(valueChanged(int)), this, SLOT(linecolor_changed()));
connect(ui->linecolor_g_slider, SIGNAL(valueChanged(int)), this, SLOT(linecolor_changed()));
connect(ui->linecolor_b_slider,SIGNAL(valueChanged(int)),this,SLOT(linecolor_changed()));
ui->fillcolor_comboBox->addItem(黑色);
ui->fillcolor_comboBox->addItem(白色);
ui->fillcolor_comboBox->addItem(红色);
ui->fillcolor_comboBox->addItem(绿色);
ui->fillcolor_comboBox->addItem(蓝色);
ui->fillcolor_comboBox->addItem(黄色);
connect(ui->fillcolor_comboBox,SIGNAL(currentTextChanged(QString)),this,SLOT(fillcolor_changed()));
}
MainWindow::~MainWindow()
{
delete ui;
delete pixmap;
delete painter;
// 删除其他未在类中定义的指针
if(linecolor) {delete linecolor;}
if(fillcolor){delete fillcolor;}
if(circle) {delete circle;}
if(rect) {delete rect;}
}
// 绘制按钮点击事件处理函数
void MainWindow::on_draw_button_clicked()
{
int index = ui->tabWidget->currentIndex();
// 根据选项卡索引绘制圆或矩形
if (index == 0)
{
circle = new Circle(new QPoint(ui->circle_x_spinBox->value(),ui->circle_y_spinBox->value()),ui->circle_r_spinBox->value());
circle->draw(painter);
}
else if(index==1)
{
rect=new Rect(new QPoint(ui->rect_x_spinBox->value(),ui->rect_y_spinBox->value()), ui->rect_a_spinBox->value(), ui->rect_b_spinBox->value());
rect->draw(painter);
}
// 更新UI显示
ui->pixmap_label->setPixmap(*pixmap);
}
// 设置边线颜色的函数
void MainWindow::linecolor_changed()
{
linecolor = new QColor(ui->linecolor_r_slider->value(),ui->linecolor_g_slider->value(),ui->linecolor_b_slider->value());
painter->setPen(*linecolor);
// 更新显示的颜色标签背景色
QPalette label_palette;
label_palette.setColor(QPalette::Background, *linecolor);
ui->linecolor_display_label->setAutoFillBackground(true);
ui->linecolor_display_label->setPalette(label_palette);
}
// 设置填充颜色的函数
void MainWindow::fillcolor_changed()
{
QString str = ui->fillcolor_comboBox->currentText();
// 根据选择的颜色设置QColor对象
if (str == 黑色) fillcolor = new QColor(Qt::black);
else if(str==蓝色) fillcolor =new QColor(Qt::blue);
...
painter->setBrush(QBrush(*fillcolor));
}
// 清除按钮点击事件处理函数
void MainWindow::on_clear_button_clicked()
{
pixmap->fill(Qt::white);
ui->pixmap_label->setPixmap(*pixmap);
}
```
以上代码简化了原始的实现,并去除了不必要的注释和冗余信息。同时,为了方便阅读和理解,在一些地方进行了适当的结构调整及说明补充。