QT Day03

1 利用QT设计师重构计算器
2 利用布局器和渐变器重新登录框
3 利用QT创造器重构计算器
1利用Qt设计师重构计算器
1.1问题
用设计师重构计算器,布局器的使用。

1.2方案
Qt可以手工编写创建界面的代码也可以使用Qt Designer界面编辑器设计,可直接控件,设置控件的属性,从而相对于手工编写界面代码简单,直观,易于操作。本案例实现用Qt设计师重构计算器界面。

1.3步骤
实现此案例需要按照如下步骤进行。

步骤一:建立工作目录Calculator2,并进入Calculator2目录,设计UI界面。

$ cd
$ mkdir计算器2
$ cd计算器2
$设计师
创建Calculator2目录,进入该目录,打开设计器终端输入designer,设计UI界面

具体步骤如下图-1所示:
在这里插入图片描述
在“新建常规”选项中选择“无按钮的对话框”,按“创建”,显示空白片段,如下图-2所示:
在这里插入图片描述
推荐新建预算,设置属性

objectName:CalculatorDlg

windowTitle:计算器

从工具箱中拖出“ Line Edit”零件合并附加,设置属性

objectName:m_editX

对齐方式:AlignRight,AlignVCenter

从工具箱中拖出“ Label”部件加入合并,设置属性

objectName:m_labOp

文字:+

对齐方式:AlignHCenter,AlignVCenter

从工具箱中拖出“ Line Edit”零件合并附加,设置属性

objectName:m_editY

对齐方式:AlignRight,AlignVCenter

从工具箱中拖出“ Push Button”部件加入分段,设置属性

objectName:m_btnCalc

已启用:错误

文字:=

从工具箱中拖出“ Line Edit”零件合并附加,设置属性

objectName:m_editZ

对齐方式:AlignRight,AlignVCenter

readOnly:true

此时不必太刻意于最小化其及其零件的位置和大小,只需粗略摆放到一个大概的相对位置即可,如下图-3所示:
在这里插入图片描述
点击细分空白区域,选择快捷菜单“布局/水平布局”,并细分中的子部件自动沿水平方向划分整齐

点击细分空白区域,选择快捷菜单“布局/调整大小”,并细分其大小自动调整至最佳状态

选择顶部菜单“编辑/编辑Tab顺序”,进入Tab键顺序设置模式,按照所期望的焦点切换顺序依次对其依次部分,如下图-4所示:
在这里插入图片描述
在Qt设计师中选择菜单“文件/保存”,将用户界面保存到工程目录下的CalculatorDlg.ui文件中,并退出设计师。

步骤二:编写CalculatorDlg.h头文件

使用uic CalculatorDlg.ui –o ui_CalculatorDlg.h,生成ui_CalculatorDlg.h头文件,编写CalculatorDlg.h头文件,代码如下:
#ifndef _CALCULATORDLG_H
#定义_CALCULATORDLG_H
#include < QDialog >
#include “ ui_CalculatorDlg.h”
类 CalculatorDlg : 公共 QDialog , 公共 Ui :: CalculatorDlg {
Q_OBJECT
公众:
CalculatorDlg ( QWidget * parent = NULL );
专用插槽:
void enableCalcButton ( void );
void calcClicked ( void );
} ;
#endif // _CALCULATORDLG_H
上述代码中,以下代码:

类 CalculatorDlg : 公共 QDialog , 公共 Ui :: CalculatorDlg {
声明CalculatorDlg类,公共继承QDialog和Ui :: CalculatorDlg类

上述代码中,以下代码:

公众:
CalculatorDlg ( QWidget * parent = NULL );
声明构造函数,参数为父窗口的指针,定义为NULL,表示标题窗口

上述代码中,以下代码:

专用插槽:
void enableCalcButton ( void );
void calcClicked ( void );
自定义私有槽函数,启用CalcButton用于激活“ =”按钮,calcClicked执行计算结果

步骤三:编写CalculatorDlg.cpp源文件

代码如下:

#include < QtGui >
#include “ CalculatorDlg.h”
CalculatorDlg :: CalculatorDlg ( QWidget *父/ * = NULL * / ) :QDialog (父) {
setupUi (this );
m_editX - > setValidator将 (新 QDoubleValidator (本));
connect ( m_editX , SIGNAL (textChanged (const QString &)),this , SLOT (enableCalcButton ( void )));
m_editY - > setValidator将 (新 QDoubleValidator (本));
connect ( m_editY , SIGNAL (textChanged (const QString &)),this , SLOT (enableCalcButton ( void )));
连接 ( m_btnCalc , SIGNAL (clicked ( void )),this , SLOT (calcClicked ( void )));
}
void CalculatorDlg :: enableCalcButton ( void ) {
布尔bXOk , bYOk ;
m_editX- > 文本 ()。toDouble (& bXOk );
m_editY- > 文本 ()。toDouble (& bYOk );
m_btnCalc- > setEnabled ( bXOk && bYOk );
如果 (! m_btnCalc- > isEnabled ())
m_editZ- > setText (“” );
}
void CalculatorDlg :: calcClicked ( void ) {
m_editZ - > 的setText (的QString :: 号码 ( m_editX - > 文本 。()toDouble () +
m_editY- > 文本 ()。toDouble (), ‘g’ , 15 ));
}
上述代码中,以下代码:

CalculatorDlg :: CalculatorDlg ( QWidget *父/ * = NULL * / ) :QDialog (父) {
定义CalculatorDlg类的构造函数,初始化初始化

上述代码中,以下代码:

setupUi (this );
初始化界面,加载ui界面到当前界面

上述代码中,以下代码:

m_editX - > setValidator将 (新 QDoubleValidator  (本));
connect  ( m_editX , SIGNAL  (textChanged  ( QString const &)), this , SLOT  (enableCalcButton  ( void )));
m_editY - > setValidator将 (新 QDoubleValidator  (本));
connect  ( m_editY , SIGNAL  (textChanged  ( QString const &)), this , SLOT  (enableCalcButton  ( void )));

创建双精度浮点数验证器,并隐藏该验证器,确保使用它的左,右编辑框只能接受合法的双精度浮点数。最后连接左,右编辑框的文本更改textChanged(QString const&)信号和当前窗口的激活” =”按钮enableCalcButton(void)槽函数

上述代码中,以下代码:

连接 ( m_btnCalc , SIGNAL  (clicked  ( void )), this , SLOT  (calcClicked  ( void )));

连接” =”按钮的点击clicked(void)信号和当前窗口的执行计算结果calcClicked(void)槽函数

上述代码中,以下代码:

void CalculatorDlg :: enableCalcButton ( void ) {
布尔bXOk , bYOk ;
m_editX- > 文本 ()。toDouble (& bXOk );
m_editY- > 文本 ()。toDouble (& bYOk );
m_btnCalc- > setEnabled ( bXOk && bYOk );
如果 (! m_btnCalc- > isEnabled ())
m_editZ- > setText (“” );
}
该函数为激活” =”按钮槽函数,当左右编辑框输入的都是合法双精度浮点数,则激活” =”按钮。否则有一个输入不合法,就设置结果编辑框内容为空。

上述代码中,以下代码:

void CalculatorDlg :: calcClicked ( void ) {
m_editZ - > 的setText (的QString :: 号码 ( m_editX - > 文本 。()toDouble () +
m_editY- > 文本 ()。toDouble (&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值