几何图形面积计算器设计与实现:Qt 框架应用
#include <widget.h>
#include
int main(int argc, char *argv[]) { QApplication a(argc, argv); QSplitter *a1 = new QSplitter(Qt::Horizontal); // 主分割水平 QListWidget *b = new QListWidget(a1); // 左侧 b->addItem('三角形的面积计算'); b->addItem('矩形的面积计算'); b->addItem('圆的面积计算');
// 创建右侧
QWidget *p = new QWidget(a1);
QVBoxLayout *c = new QVBoxLayout(p);
QStackedWidget *c1 = new QStackedWidget;
// 水平布局
QHBoxLayout *h = new QHBoxLayout;
QPushButton *ps1 = new QPushButton('关闭');
h->addWidget(ps1);
h->setAlignment(Qt::AlignRight);
// 把右侧的放入垂直
c->addWidget(c1);
c->addLayout(h);
// 使用 Qt 界面类创建层叠
Form1 *d = new Form1;
Form2 *d1 = new Form2;
Form3 *d2 = new Form3;
c1->addWidget(d); // 加入层叠
c1->addWidget(d1);
c1->addWidget(d2);
QObject::connect(b, &QListWidget::currentRowChanged, c1, &QStackedWidget::setCurrentIndex);
QObject::connect(ps1, &QPushButton::clicked, &a, &QApplication::quit);
a1->show();
return a.exec();
}
#include "form2.h" #include "ui_form2.h"
Form2::Form2(QWidget *parent) : QWidget(parent), ui(new Ui::Form2) { ui->setupUi(this); }
Form2::~Form2() { delete ui; }
void Form2::on_pushButton_clicked() { double a = ui->lineEdit->text().toDouble(); // 获取 lineEdit 中的值,并转换为 double 类型 double b = ui->lineEdit_2->text().toDouble(); double d = a * b; ui->label_5->setText(QString('%1').arg(d)); // 将计算结果设置到 label 上 }
void Form2::on_pushButton_2_clicked() { ui->lineEdit->setText(''); ui->lineEdit_2->setText(''); ui->label_5->setText(''); }
几何图形面积计算器的设计与实现
目录
一、Qt 概述 二、项目需求描述和设计 1. 需求描述 2. 界面设计 3. 布局设计 4. 代码设计 三、项目实现和结果展示 1. 代码实现 2. 界面展示 四、总结 五、参考文献
一、Qt 概述
Qt 是一款跨平台的 C++ 图形用户界面应用程序开发框架。它提供了一套完整的图形界面解决方案,包括窗口和控件、布局和样式、事件和信号、绘图和动画等功能,同时也提供了网络、数据库、XML、多线程等常用功能模块。
Qt 框架的核心是信号和槽机制,它是 Qt 最重要的特色之一。信号和槽是一种事件处理机制,可以在不同的对象之间进行通信,使程序更加灵活和易于维护。
二、项目需求描述和设计
- 需求描述
本项目要求设计一个几何图形面积计算器,包括三种几何图形:三角形、矩形和圆形。用户可以通过在左侧的列表中选择要计算的几何图形,然后在右侧的界面中输入参数,计算出该几何图形的面积。
- 界面设计
本项目的界面采用 QSplitter 布局,分为左右两侧。左侧使用 QListWidget 显示几何图形列表,右侧使用 QVBoxLayout 布局,包括一个堆栈窗体 QStackedWidget 和一个按钮布局。
堆栈窗体 QStackedWidget 中包含三个窗体,分别用于计算三角形、矩形和圆形的面积。每个窗体采用基本布局方式进行布局管理,包括输入参数和输出结果。
按钮布局包括一个“关闭”按钮,用于关闭程序。
- 布局设计
本项目采用以下布局:
-
主窗体:QSplitter,水平布局
-
左侧:QListWidget
-
右侧:QVBoxLayout
- 堆栈窗体:QStackedWidget
- 计算三角形面积的窗体:Form1
- 计算矩形面积的窗体:Form2
- 计算圆形面积的窗体:Form3
- 按钮布局:QHBoxLayout,右对齐
- 关闭按钮:QPushButton
- 堆栈窗体:QStackedWidget
-
代码设计
本项目的代码设计包括以下几个部分:
- 主函数:创建主窗体,并设置布局
- 窗体类:Form1、Form2、Form3,分别用于计算三角形、矩形和圆形的面积
- 信号和槽函数:用于实现界面的响应和交互
主函数的代码如下:
#include "widget.h"
#include <QApplication>
#include <QSplitter>
#include <QListWidget>
#include <QLayout>
#include <QStackedWidget>
#include <QPushButton>
#include "form1.h"
#include "form2.h"
#include "form3.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplitter *a1 = new QSplitter(Qt::Horizontal); // 主分割水平
QListWidget *b = new QListWidget(a1); // 左侧
b->addItem('三角形的面积计算');
b->addItem('矩形的面积计算');
b->addItem('圆的面积计算');
// 创建右侧
QWidget *p = new QWidget(a1);
QVBoxLayout *c = new QVBoxLayout(p);
QStackedWidget *c1 = new QStackedWidget;
// 水平布局
QHBoxLayout *h = new QHBoxLayout;
QPushButton *ps1 = new QPushButton('关闭');
h->addWidget(ps1);
h->setAlignment(Qt::AlignRight);
// 把右侧的放入垂直
c->addWidget(c1);
c->addLayout(h);
// 使用 Qt 界面类创建层叠
Form1 *d = new Form1;
Form2 *d1 = new Form2;
Form3 *d2 = new Form3;
c1->addWidget(d); // 加入层叠
c1->addWidget(d1);
c1->addWidget(d2);
QObject::connect(b, &QListWidget::currentRowChanged, c1, &QStackedWidget::setCurrentIndex);
QObject::connect(ps1, &QPushButton::clicked, &a, &QApplication::quit);
a1->show();
return a.exec();
}
窗体类的代码如下:
// Form1.h
#ifndef FORM1_H
#define FORM1_H
#include <QWidget>
namespace Ui {
class Form1;
}
class Form1 : public QWidget
{
Q_OBJECT
public:
explicit Form1(QWidget *parent = nullptr);
~Form1();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::Form1 *ui;
};
#endif // FORM1_H
// Form1.cpp
#include "form1.h"
#include "ui_form1.h"
Form1::Form1(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form1)
{
ui->setupUi(this);
}
Form1::~Form1()
{
delete ui;
}
void Form1::on_pushButton_clicked()
{
double a = ui->lineEdit->text().toDouble();
double b = ui->lineEdit_2->text().toDouble();
double d = a * b / 2;
ui->label_5->setText(QString('%1').arg(d));
}
void Form1::on_pushButton_2_clicked()
{
ui->lineEdit->setText('');
ui->lineEdit_2->setText('');
ui->label_5->setText('');
}
// Form2.h
#ifndef FORM2_H
#define FORM2_H
#include <QWidget>
namespace Ui {
class Form2;
}
class Form2 : public QWidget
{
Q_OBJECT
public:
explicit Form2(QWidget *parent = nullptr);
~Form2();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::Form2 *ui;
};
#endif // FORM2_H
// Form2.cpp
#include "form2.h"
#include "ui_form2.h"
Form2::Form2(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form2)
{
ui->setupUi(this);
}
Form2::~Form2()
{
delete ui;
}
void Form2::on_pushButton_clicked()
{
double a = ui->lineEdit->text().toDouble();
double b = ui->lineEdit_2->text().toDouble();
double d = a * b;
ui->label_5->setText(QString('%1').arg(d));
}
void Form2::on_pushButton_2_clicked()
{
ui->lineEdit->setText('');
ui->lineEdit_2->setText('');
ui->label_5->setText('');
}
// Form3.h
#ifndef FORM3_H
#define FORM3_H
#include <QWidget>
namespace Ui {
class Form3;
}
class Form3 : public QWidget
{
Q_OBJECT
public:
explicit Form3(QWidget *parent = nullptr);
~Form3();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::Form3 *ui;
};
#endif // FORM3_H
// Form3.cpp
#include "form3.h"
#include "ui_form3.h"
#include <cmath>
Form3::Form3(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form3)
{
ui->setupUi(this);
}
Form3::~Form3()
{
delete ui;
}
void Form3::on_pushButton_clicked()
{
double a = ui->lineEdit->text().toDouble();
double d = M_PI * a * a;
ui->label_4->setText(QString('%1').arg(d));
}
void Form3::on_pushButton_2_clicked()
{
ui->lineEdit->setText('');
ui->label_4->setText('');
}
三、项目实现和结果展示
- 代码实现
本项目的代码实现主要包括窗体的设计和信号槽的连接。窗体的设计主要使用 Qt Designer 来完成,信号槽的连接使用 QObject::connect 函数来实现。
- 界面展示
本项目的界面如下图所示:
[图片插入]
四、总结
本次项目设计了一个几何图形面积计算器,包括三种几何图形:三角形、矩形和圆形。通过使用 Qt 框架,实现了界面的设计和信号槽的连接,并且实现了计算几何图形面积的功能。
在项目实现过程中,主要遇到以下问题:
- 如何实现堆栈窗体 QStackedWidget 和按钮布局 QHBoxLayout 的嵌套布局。
- 如何在窗体中实现输入参数和输出结果的布局。
通过查阅 Qt 的官方文档,以及借鉴相关的示例代码,最终成功解决了这些问题。
在项目实现过程中,还有一些可以改进的地方,例如可以增加更多的几何图形,增加更多的计算功能,增加更多的界面美化效果等。
总体来说,本次项目的设计与实现,让我更加深入地了解了 Qt 框架的使用方法和信号槽机制,也让我更加熟练地掌握了 C++ 编程技巧,对我的编程能力和开发经验都有很大的帮助。
五、参考文献
- Qt 官方文档,https://doc.qt.io/qt-5/
- Qt Creator 官方文档,https://doc.qt.io/qtcreator/
- C++ Primer Plus(第 6 版),Stephen Prata,人民邮电出版社,2013 年。
原文地址: https://www.cveoy.top/t/topic/owe9 著作权归作者所有。请勿转载和采集!