Qt开发基本步骤示例:输入半径显示圆的面积

目录

1. 创建一个新项目

1.1 创建类的基类

1.2 main.cpp代码释义

2. 代码写在哪?

2.1 怎么找到我们需要的函数?

3. 实战:输入半径显示圆的面积


1. 创建一个新项目

点击创建项目,开始创建:

1.1 创建类的基类

  1. QMainWindow:带菜单栏的窗口
  2. QWidget:空白窗口
  3. QDialog: 对话框窗口

注意:保存项目的路径中不能有中文!项目工程名称一般不要有特殊符号或者中文!

1.2 main.cpp代码释义

单击完成,系统就自动打开了main.cpp文件,如下图所示:

  1.  #include "dialog.h":包含了程序中要完成功能的Dialog类的定义,在Dialog类中封装完成所需要的功能。注意:使用哪个类就必须将该类的头文件引用过来。例如,若用到了一个按钮类,则必须在此处顶部添加一行代码:#include "QPushButton",这表明包含了按钮QPushButton类的定义。
  2. #include <QApplication>:Application类的定义。在每个使用Qt图形化应用程序中都必须使用一个QApplication对象。QApplication管理了各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等。
  3. int main(int argc, char *argv[]):应用程序的入口,几乎在所有使用Qt的情况下,main() 函数只需要在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。所有Qt程序中都必须有且只有一个main() 函数。main() 函数有两个参数,即:argc和argv。argc是命令行变量的数量,argv是命令行变量的数组。
  4. QApplication a(argc, argv):a是这个程序的QApplication对象。在任何Qt的窗口系统部件被使用之前必须创建QApplication对象。它在这里被创建并且处理这些命令行变量。所有被Qt识别的命令行参数都将从argv中被移去(并且argc也因此而减少)。
  5. Dialog w:创建一个对话框对象。
  6. w.show():当创建一个窗口部件的时候,默认它是不可见的,必须调用show() 函数使它变为可见。
  7. return a.exec():程序进入消息循环,等待可能的输入进行响应。这里就是main() 函数将控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec() 函数的值就会返回。在exec() 函数中,Qt接收并处理用户和系统的事件并且将它们传递给适当的窗口部件。

2. 代码写在哪?

可以看到左边菜单栏中有4个文件,其中 main.cpp 是主函数。dialog.cpp 是类的函数,一般情况下,窗口的属性和添加控件的操作都会在类的构造函数中去写,优点是可以让主程序中无多余代码,程序阅读也方便。而 dialog.h 是类和头文件,dialog.ui 是界面设计代码。

比如我现在想要修改一下窗口的标题,然后将窗口设置为固定大小并且不可以拉伸。那么问题来了,假设我不知道这个修改窗口标题的函数是什么该怎么办呢?

2.1 怎么找到我们需要的函数?

我们可以单击左侧的帮助按钮,然后将查询方式改为索引,接着我们开始在搜索框中搜索我们想要函数。那搜什么呢?既然我们想设置的是窗口的标题,那么肯定是和窗口有关。那么我们先试着输入单词window,然后我们发现下面有一个函数 setWindowTitle() 。

除了在帮助中查找,我们还可以在电脑的开始菜单栏中找到Qt文件夹下的 Assistant (助手)。

 打开Qt助手,我们还是切到索引,然后输入单词 window,如下图:

 注意:如果函数在类中未找到,可去其基类中查找。

 

 后退、向前可以点击左上角的2个黄色箭头。

接着我们开始写代码:

#include "dialog.h"
#include "./ui_dialog.h"

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

    // 修改窗口标题
    this->setWindowTitle("我的第一个窗口");

    // 修改窗口的大小
    this->resize(500, 300);

    // 设置窗口不可拉伸
    this->setFixedSize(600, 600);

}

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

看下运行效果:

3. 实战:输入半径显示圆的面积

上面我们顺便讲到了修改窗口的属性,代码是写在了dialog.cpp 中的,那在实际开发中我们的其它代码写在哪里呢?

 如上图所示,我们想做一个简单的、计算圆面积的小程序。想要实现的效果是:当我们在1处输入半径数据,然后点击3处的开始计算按钮之后,2处的空白标签控件会显示出计算结果。

这里就涉及到了信号和槽的概念了,但是这里我们不展开去讲,先把这个小程序的功能实现了再说。

具体怎么操作呢?代码怎么写?又该写在哪里呢?

首先,我们双击dialog.ui 文件,进入ui设计界面。第1步,单击按钮控件。第2步,右击弹出菜单选择转到槽 ,然后选择clicked() 。第3步确定。

 点击确定后,系统就会自动打开了dialog.cpp 文件中,那接下来的实现代码是不是就是在这里写呢?没错,但是咱们先不急着写,先打开dialog.h 也就是头文件。我们发现文件中的内容多了2行代码:

private slots:
    void on_pushButton_clicked();

通过ui界面直接添加信号槽的好处就体现在这里了,我们不需要自己去添加代码,系统已经自动帮我们添加好了。但是这里不要动,我们的具体代码还是要回到dialog.cpp 中去写。

void Demo_1::on_pushButton_clicked()
{
    int value=ui->lineEdit->text().toDouble();
    double area=value*value*3.14;
    QString temp;
    ui->label_3->setText(temp.setNum(area));
}

中间的4行代码就是实现计算圆面积的全部代码了,是不是很简单呢?下面我们运行测试一下:

 当我们输入2,然后点击开始计算按钮,label_3就立即显示出了计算结果12.56。然后我们再输入0.5试一下:

 咦?结果怎么会是0!?

原来是声明变量的时候写成了int 类型。。。。大家可千万不要像我一样粗心大意、学了前面忘了后面哈~

最终修改后的代码如下:

void Demo_1::on_pushButton_clicked()
{
    double value=ui->lineEdit->text().toDouble();
    double area=value*value*3.14;
    QString temp;
    ui->label_3->setText(temp.setNum(area));
}

dialog.cpp 中完整代码如下: 

#include "dialog.h"
#include "./ui_dialog.h"

Dialog::dialog(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

}

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

void Dialog::on_pushButton_clicked()
{
    double value=ui->lineEdit->text().toDouble();
    double area=value*value*3.14;
    QString temp;
    ui->label_3->setText(temp.setNum(area));
}

最后,因为我也才刚接触Qt,难免会存在一些错误的地方,欢迎大家在评论区批评指正。也恳请路过的大佬们帮我点个赞,虽然只是顺手的一个赞,但也能让我开心好几天。拜托啦~

ღ( ´・ᴗ・` )比💕

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喵呜角角

如果对你有所帮助,哪怕1毛钱~

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

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

打赏作者

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

抵扣说明:

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

余额充值