1 目录及资源索引
2 项目需求
- 有一个图形化的窗口界面;
- 有半径、面积等窗口部件;
- 输入半径可以自动计算面积等;
3 软件开发
3.1 创建工程
创建过程参考5-2,在类信息那一栏取消勾选创建界面,其他部分不变,如下图
3.2 需求实现
- 创建完成后的主函数,不需要修改,只需要修改我们自己创建的这个类即可。主函数内容如下:
- 接着在 mydialog.h 中定义使用到的变量及函数,在此之前还要包含用到的头文件,内容如下
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
#include <QLabel> // 文本框
#include <QLineEdit> // 输入内容
#include <QPushButton> // 按键
class MyDialog : public QDialog
{
Q_OBJECT
public:
MyDialog(QWidget *parent = 0);
~MyDialog();
private:
QLabel *label1, *label2; // 定义两个文本框
QLineEdit *lineEdit; // 定义输入半径框
QPushButton *button; // 定义按钮
private slots:
void showArea(); // 槽函数 计算圆的面积
};
#endif // MYDIALOG_H
- 接着在cpp文件中完善相关函数,下边有两种实现计算半径的方法,一种是输入半径后,点击对应按键,然后计算出面积;另一种是输入半径,自动计算面积。源码文件如下:
#include "mydialog.h"
#include <QGridLayout>
const static double PI = 3.1415;
MyDialog::MyDialog(QWidget *parent)
: QDialog(parent)
{
label1 = new QLabel(this);
label1->setText( tr("请输入圆的半径:") ); // 将文本字符串 转换格式
lineEdit = new QLineEdit(this);
label2 = new QLabel(this);
button = new QPushButton(this);
button->setText( tr("计算圆的面积") ); // 创建按键对象,然后显示对应文本内容
QGridLayout *mainLayout = new QGridLayout(this); // 创建会话框
mainLayout->addWidget(label1, 0, 0); // 会话框添加 文本显示控件1
mainLayout->addWidget(lineEdit, 0, 1); // 会话框添加 文本输入控件
mainLayout->addWidget(label2, 1, 0); // 会话框添加 文本显示控件2
mainLayout->addWidget(button, 1, 1); // 会话框添加 按钮
// 使用槽函数 关联到按键,只要按键有触发,就执行计算面积函数
// connect(button, SIGNAL(clicked()), this, SLOT(showArea()));
// 使用此函数 当检测到有内容输入,就自动计算面积
connect(lineEdit, SIGNAL(textChanged(QString)), this, SLOT(showArea()));
}
MyDialog::~MyDialog()
{
}
void MyDialog::showArea()
{
bool ok; // 定义布尔变量
QString tempStr; // 定义中转字符串变量
QString valueStr = lineEdit->text(); // 获取输入的文本内容 字符串格式
int valueInt = valueStr.toInt(&ok); // 将获取到的字符串格式的文本内容转换为 int 类型
double area = valueInt * valueInt * PI; // 利用圆的面积公式,计算面积
label2->setText(tempStr.setNum(area)); // 将计算结果显示出来
}
- 可以在上述代码中看到有两个 connect 函数,第一个是检测到有按键信号,然后执行计算面积函数;第二个是检测到有文本输入信号,然后计算圆面积。两种方法都可以试一下。
- 测试结果截图如下:
4 总结
- 编程过程基本都是参考文章开头分享的教程来做的,挺好用的;
- 两种实现计算面积的方式,主要是获取的信号不一样,需注意;
- 目前还只是参考源码,然后自己编程来做,对一些函数了解的不是很深入,后续要慢慢补上;
- 有兴趣的可以私信加我好友,共同学习交流!