刚开始学习QT,我觉得需要一本完整的教材,然后利用好网络资源,通过编写例程的形式,逐步将QT的知识点融入到工程应用中去,这样效果会事半功倍。
本文主要是研究如何利用Dialog基类进行界面的设计,实现计算长方形的面积的功能。
看了QT5开发和实例(第二版),关于计算圆面积的范例,我想自己写一个计算长方形的范例。首先让我们共同学习一下关于构造函数的概念。
1、构造函数的概念
- 构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
- 构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;
- 构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
- 当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略;
- 构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(c++)
- 当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。
第一步,新建一个Dialog基类的工程,将项目名称命名为Rectangle,取消生成ui界面,因为本次采用布局管理器实现界面的设计。
然后打开dialog.h头文件,必须在开始出添加所需的头文件,在class(类,结尾处要加上分号,详见网上资源)中定义变量,代码如下图:
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QDialog>
private:
QLabel *label1,*label2,*label3;//定义三个标签,构造函数中使用
QLineEdit *lineEdit1,*lineEdit2;//定义两个文本框
QPushButton *button;//点击按钮可以链接槽函数
第二步,利用布局管理器实现对界面的设计。构造函数主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 ;打开dialog.cpp文件,在Dialog中添加如下代码,在文件开始处加上QGridLayout的头文件,然后开始控件的新建和实例化;具体代码如下:
label1 = new QLabel(this);//实例化;
label1->setText(tr("请输入长方形的长:"));
label2 = new QLabel(this);
label2->setText(tr("请输入长方形的宽:"));
label3 = new QLabel(this);//作为数据输出的窗口;
lineEdit1 = new QLineEdit(this);
lineEdit2 = new QLineEdit(this);
button = new QPushButton(this);
button->setText(tr("显示长方形的面积:"));
QGridLayout *mainLayout = new QGridLayout(this);//用于布局管理器,固定所有控件的位置;
mainLayout->addWidget(label1,0,0);//第一个参数是控件名,第二个是行数(row),第三个为列数(column);
mainLayout->addWidget(lineEdit1,0,1);
mainLayout->addWidget(label2,1,0);
mainLayout->addWidget(lineEdit2,1,1);
mainLayout->addWidget(label3,2,0);
mainLayout->addWidget(button,2,1);
这里,我简单介绍一下QGridLayout::addWidget()的应用 ,一般有两种方式进行查询帮助:鼠标光标悬停在函数上,点击F1或者按住ctrl键,再用鼠标左键点击函数即可获得详细信息。
2、QGridLayout::addWidget()的应用
QGridLayout::addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 )
row:行位置 column:列位置 alignment;对齐方式void QGridLayout::addWidget(QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0)
This is an overloaded function.6个参数表示控件名,行,列,占用行数,占用列数,对齐方式
ui界面设计完成之后,我们需要对计算逻辑进行梳理;在Dialog.h中,我们定义一个槽函数showArea():
private slots:
void showArea();//声明面积的槽函数;
之后,我们需要在Dialog.cpp中实例化该槽函数,就等同于在C++环境中对某函数进行阐述,里面有对应的变量逻辑,具体代码如下:
void Dialog::showArea()
{
bool ok;//定义一个bool变量,变量名为ok;
QString tempStr;
QString valueStr = lineEdit1->text();
int valueInt = valueStr.toInt(&ok);//toInt主要用于判断输入是否为整形,如果输入A-Za-z,结果则为false;
QString valueaStr = lineEdit2->text();
int valueaInt = valueaStr.toInt(&ok);
double area=valueInt*valueaInt;
label3->setText(tempStr.setNum(area));
}
在输入框中,默认的是字符串形式,所以我们定义了 tempStr ,valueStr,valueaStr三个QString变量,然后利用toInt将字符串转换为整型,然后显示出结果;运行结果如下图:

其实我们可以不用将数据的格式转来转去,我们可以利用 <QDoubleSpinBox>类进行操作,在构造函数中,只需要调用如下指令即可完成数据的读取任务;
//QDoubleSpinBox *lab = new QDoubleSpinBox(this);
//lab->value();直接获取它的值
这篇博客介绍了QT Creator 5.3.2的基础知识,特别是如何利用Dialog基类和QGridLayout布局管理器设计界面,实现计算长方形面积的功能。文章详细讲解了构造函数的概念,QGridLayout::addWidget()的使用方法,并提供了实现逻辑的代码示例。
1415

被折叠的 条评论
为什么被折叠?



