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 (&