Qt开发应用程序的两种方式
目录
案例:计算圆面积(两种方式实现)
方式一:设计器 Qt Designer实现 (20201015)
方案A:触发按钮事件(_clicked())
方案B:触发输入编辑框事件(_textChanged(const Qstring &arg1))
方式二:代码实现(202010152)
方案A:触发按钮事件
方案B:触发输入编辑框事件
信号和槽机制:任意两个Qt对象之间的通信机制(使对象间灵活通信)
1.信号与槽机制的连接方式
2.信号与槽机制的优点
3.信号与槽机制的缺点
Qt元对象系统:是标准C++的扩展,但不支持C++模板
Qt是一个跨平台的C++形用户界面应用程序框架,我们用Qt进行GUI应用程序开发。
GUI:图形用户界面。
Qt开发应用程序的方式有两种:(1)Qt的GUI界面设计器 (Qt Designer);(2)手写代码。
这两种的区别在于创建新项目过程中有无勾选“创建界面”选项,如下图所示:
案例:计算圆面积(两种方式实现)
计算圆的面积:S=π×(r^2) (半径/面积)
方式一:设计器 Qt Designer实现 (20201015)
设计区窗体部分:
Edit Widgets (F3) 编辑控件
Edit Signals/Slots (F4) 编辑信号/槽
Edit Buddies 编辑伙伴(QLabel标签关联快捷键)
Edit Tab Order 编辑Tab顺序
水平布局 (H)
垂直布局 (V)
使用分裂器水平布局 (P)
使用分裂器垂直布局 (L)
在窗体布局中布局 (F)
栅格布局 (G)
打破布局 (B)
调整大小 (S)
QLabel属性没有设置之前,QFrame下的frameShape为NoFrame,frameShadow为Plain,我们根据需要分别设置frameShape为Panel,frameShadow为Sunken。
改变QLabel属性之后的对比如下(可以看到下沉效果的盘子 Sunken/Panel):
int main( )函数是应用程序的入口。
几乎所有使用Qt的情况下,main()函数只需在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。
【main.cpp】#include "dialog.h" //使用哪个类就必须把包含该类的头文件引用过来(*.h文件中包含了相应类的定义)
#include <QApplication> //每个使用[Qt图形化应用程序]中都必须使用一个QApplication对象//QApplication管理各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等
int main(int argc, char *argv[]) //这里是应用程序的入口。几乎所有使用Qt的情况下,main()函数只需在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。//所有Qt程序必须有且只有一个main()函数。argc是命令行变量的数量,argv是命令行变量的数组。
{QApplication a(argc, argv); // a是创建的QApplication类的对象,用来处理命令行变量。所有被Qt识别的命令行参数都将从argv中移去,argc也因此减少Dialog w; //创建对话框Dialog类的对象(包含该类头文件)w.show(); //窗口部件可见return a.exec(); //main()函数将控制权交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。//exec()函数中,Qt接收并处理用户和系统的事件,并且将他们传递给适当的窗口部件。
}
方案A:触发按钮事件(_clicked())
即文本框内输入数值,点击“计算”按钮,得出计算结果
【dialog.cpp】
#include "dialog.h"
#include "ui_dialog.h"
const static double PI=3.1416; //静态全局变量PI
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);
}
Dialog::~Dialog()
{delete ui;
}
void Dialog::on_countBtn_clicked()
{bool ok; //为什么用这个呢???QString tempStr; //临时变量QString radiusStr = ui->radiuslineEdit->text(); //半径(字符串类型变量) //控件属性需设置:只许输入数字,不许输入汉字int radiusValue = radiusStr.toInt(&ok); //半径(整型变量)double area = radiusValue*radiusValue*PI; //面积(S=pi*r^2)ui->arealabel_2->setText(tempStr.setNum(area));//整型变字符串,计算结果显示
}
方案B:触发输入编辑框事件(_textChanged(const Qstring &arg1))
即文本框内输入数值,不需单击按钮,直接显示计算结果
【dialog.cpp】
#include "dialog.h"
#include "ui_dialog.h"
const static double PI=3.1416; //静态全局变量PI
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);
}
Dialog::~Dialog()
{delete ui;
}
void Dialog::on_radiuslineEdit_textChanged(const QString &arg1)
{bool ok; //为什么用这个呢???QString tempStr; //临时变量QString radiusStr = ui->radiuslineEdit->text(); //半径(字符串类型变量) //控件属性需设置:只许输入数字,不许输入汉字int radiusValue = radiusStr.toInt(&ok); //半径(整型变量)double area = radiusValue*radiusValue*PI; //面积(S=pi*r^2)ui->arealabel_2->setText(tempStr.setNum(area));//整型变字符串,计算结果显示
}
方式二:代码实现(202010152)
方案A:触发按钮事件
【dialog.h】
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
//class类:默认是私有变量;struct类:默认是公用变量。
class Dialog : public QDialog
{Q_OBJECT //Q_OBJECT是个宏。作用是启动Qt5元对象系统的一些特性(如支持信号和槽等)。它必须放在类定义的私有区中。
public:Dialog(QWidget *parent = 0); //构造函数~Dialog(); //析构函数
private:QLabel *label1,*label2; //声明QLabel类控件的对象QLineEdit *lineEdit; //声明QLineEdit类控件的对象QPushButton *button; //声明QPushButton类控件的对象
private slots:void showArea(); //声明槽函数
};
#endif // DIALOG_H
【dialog.cpp】
#include "dialog.h"
#include <QGridLayout> //布局管理器
const static double PI=3.1416; //静态全局变量
Dialog::Dialog(QWidget *parent): QDialog(parent)
{label1 = new QLabel(this); //创建QLabel类的对象1label1->setText(tr("请输入圆的半径:"));lineEdit = new QLineEdit(this); //创建QLineEdit类的对象label2 = new QLabel(this); //创建QLabel类的对象2button = new QPushButton(this); //创建QPushButton类的对象button->setText(tr("显示圆的面积"));QGridLayout *mainLayout = new QGridLayout(this); //4个控件的布局管理mainLayout->addWidget(label1,0,0);mainLayout->addWidget(lineEdit,0,1);mainLayout->addWidget(label2,1,0);mainLayout->addWidget(button,1,1);//信号和槽的关联connect(button,SIGNAL(clicked()),this,SLOT(showArea())); //方式A:触发按钮事件//connect(lineEdit,SIGNAL(textChanged(QString)),this,SLOT(showArea())); //方式B:触发输入编辑框事件
}
Dialog::~Dialog()
{
}
//定义槽函数
void Dialog::showArea()
{bool ok; //为什么用这个呢???QString tempStr; //临时变量--字符串型QString radiusStr = lineEdit->text(); //半径(字符串类型变量) //控件属性需设置:只许输入数字,不许输入汉字int radiusValue = radiusStr.toInt(&ok); //半径(整型变量)double area = radiusValue*radiusValue*PI;//面积(S=pi*r^2)label2->setText(tempStr.setNum(area)); //整型变字符串,计算结果显示
}
方案B:触发输入编辑框事件
connect(lineEdit,SIGNAL(textChanged(QString)),this,SLOT(showArea())); //方式B:触发输入编辑框事件
附录:
信号和槽机制:任意两个Qt对象之间的通信机制(使对象间灵活通信)
1.信号与槽机制的连接方式
2.信号与槽机制的优点
3.信号与槽机制的缺点
Qt元对象系统:是标准C++的扩展,但不支持C++模板
Qt开发应用程序的两种方式相关推荐
- 周一02.3运行python程序的两种方式
一.运行python程序的两种方式 方法一:交互式: 优点:输入一行代码立刻返回结果 缺点:无法永久保存代码 方法 ...
- ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约
ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约 目录 1.Geth安装.配置文件.与ETH节点交互 1.1.下载并安装好geth客户端 1.2. ...
- python有两个运行程序分别是什么_运行python程序的两种方式
[单选题]I wonder why ________ are so interested in action movies. [单选题]项目经理的职责不包括以下哪项内容 ? [简答题]结合项目的特点和 ...
- python打开方式包括_运行Python程序有两种方式:________和________。
运行Python程序有两种方式:________和________. 答: 交互式 文件式 自觉的人,心目中有一张蓝图,人生理想.但是不知道世界的游戏规则 答:× 山水画的鉴赏方法? 答:1.首先看风 ...
- 运行python程序的两种方式交互式和文件式_Python基础知识2
运行Python程序的两种方式 小白学习,如有错误欢迎指点 一.每位小白写的第一个Python程序 1.运行Python程序的两种方式 1.1 交互式模式(即时对话) 打开cmd,打开Python解释 ...
- 运行python程序的两种方式交互式和文件式_执行Python程序的两种方式
交互式(了解) 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉cmd窗口数据就消失了. 命令行式(了解) 打开文本编辑器,在文本编辑器中写入一串字符. ...
- 运行python程序的两种方式交互式和文件式_教你如何编写、保存与运行 Python 程序...
第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...
- python程序执行的两种方式_012.执行Python程序的两种方式
一.执行Python程序的两种方式 1.1 交互式 在终端内输入python3,然后输入python代码 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉 ...
- 在网页中执行本地exe程序的两种方式
一.有时候,需要在 网页上去执行本地的一个EXE文件,如果用javascript ,一般浏览器,由于安全问题,都会禁止掉这个特性.但经过测试,目前在ie,firefox中仍然可以用JS来实现,但在ch ...
最新文章
- php查找二维数组下标,PHP实现二维数组中的查找算法小结
- “Account is trusted for delegation is not shown || cannot see the Delegation tab
- 是时候了解一下Serverless了
- 【转载保存】Lucene 实战教程第六章 Lucene 的精确、包含、集合查询 Query 的简单使用
- 使用pickle模块序列化数据,优化代码
- C语言的预编译,程序员必须懂的知识!【预编译指令】【预编译过程】
- oracle 不查加锁的记录,查询记录时给oracle记录加锁
- hdoj1242(bfs+priority_queue)
- 【Python】Qt国际化ts文件转excel文件(xml转excel)
- 系统动力学学习笔记一
- 电脑系统怎么修改图片格式
- 战雷国际服服务器位置,战雷国际服服务器丢失 | 手游网游页游攻略大全
- 原神角色展示(HTML+CSS)
- ZOOM视频会议总是很卡连接不上
- 造轮子之 npm i -g creatshare-app-init 源码浅析
- vue项目中运行项目造成浏览器崩溃
- datawhale 8月学习——NLP之Transformers:编写BERT模型
- 大白菜制作win10系统盘
- 阿里云服务器(Windows)如何远程连接?
- 学习TypeScrip1(基础类型)