创建一个简单QT桌面应用

/* Copyright 夜流冰 */

QT版本5.14.1, QT Creator 4.11.1.

1,打开QT Creator

2,Project -> New,填写项目名和路径。

3,选择Application -> Qt Widgets Application

4,选择构建类型:qmake,cmake,Qbs的一种。

5,更改类名,相应的源文件的名字也会更改。注意勾选“Generate form” (创建界面),才能使用界面设计器。

6,Base class选择,有QMainWindows,QWidget,QDialog。

7,翻译文件,可以先不选。

8,选择工具链(Kit Selection),这里笔者安装的是Desktop Qt 5.14.2 MSVC2017 64bit

9,配置子项目选择和版本控制系统,如无需要略过。

10,点击完成。

关于基类的选择,在QTCreator的help->Index中搜索相关内容:QMainWindow ,QWidget,QDialog。

QMainWindow和QDialog继承QWidget,QWidget继承QObject 和QPaintDevice。

QWidget是Qt中的窗口基类,QDialog是一个对话框,QMainWindow是一个程序的标准界面。

关于QMainWindow的界面形式参见下图:

--------------------------------------------

按照上面介绍的步骤,创建一个名为Diaglog的项目,基类选择QDialog。

在编辑视图下,项目显示模式,看到有main.cpp和Dialog.cpp,Dialog.h文件。

main.cpp里是这样的:

#include "dialog.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

1,先包含的是“dialog.h”,是我们创建的类,下面要引用。

2,包含<QApplication>, 这个是Application类的定义,每个使用Qt图形化应用程序中都必须使用一个QApplication对象。它管理各种资源,设置,控制流及事件处理。

3,然后是main函数,应用程序的入口。使用Qt时,main函数只需将控制转交给Qt库之前执行初始化。然后Qt库通过事件向程序告知用户的行为。

4,QApplication a(argc, argv), a 是这个程序的QApplication对象。在任何Qt的窗口系统部件被使用之前必须创建QApplication对象,并处理main函数传过来的参数。

5,w.show( ),当创建一个窗口部件的时候,默认它是不可见的,必须调用show( ) 函数使他变为可见。

6,return a.exec( ); 程序进入消息循环,等待可能的输入进行响应。这里就是main函数将控制权交给Qt。当程序退出,exec函数就会返回。

      在exec函数中,Qt接收并处理用户和系统的事件,并且将它们传递给适当的窗口部件。

下一步,我们就要对我们的Diaglog窗口类进行编辑。

我们直接使用界面设计器来做,这个和C#等IDE类似,所见即所得,直接将控件拖动到编辑区域。

1,双击ui文件,会进入设计界面,Qt Designer。

2,拖曳控件容器栏的滚动条,找到里面的Label / button等控件,放入中间的编辑框中,选择合适位置。
      比如放入一个push button,可用于提交响应单击事件。

3,修改控件的属性,比如控件的名字,控件的显示文字等。在对象查看器里改名字,在属性编辑器里改属性。

4,Ctrl + R,运行,查看界面运行效果。OK后关闭程序,继续编辑。

5,同C#等IDE类似,在控件上点击鼠标右键,选择“转到槽...”命令,然后选择相应的信号(类似C#里面的事件,比如按键按下事件)。

6,选中后会创建相应的信号或事件的槽函数,然后进行编程。

7,对界面设计进行编辑后,会自动生成一个头文件:ui_dialog.h,这里定义了界面布局,里面包含了各个控件的引用。

      如果要访问控件的内容,可以在dialog.cpp的槽函数中,使用代码: ui->mylable.text( );

注意,Qt和.Net的图形应用程序类似,都是事件驱动的架构。从用户或系统等外部得到事件(条件变化),然后程序对事件响应或处理,如果程序内没有相应处理,会转到Qt或.Net默认的行为。

简单编码举例:

    const double PI = 3.1416;
    bool ok;
    QString tempStr;
    QString valueStr = ui->radiusLineEdit->text();
    double valueDbl = valueStr.toDouble(&ok);
    double area = valueDbl*valueDbl*PI;
    ui->areaLabel2->setText(tempStr.setNum(area));

读取LineEdit的用户输入文本,转换为整数,然后计算面积,用另一个label来显示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值