QT桌面应用程序 - 使用布局管理器

1,创建一个QT项目,参照文章“创建一个简单QT桌面应用”

2,项目命名为Dialog,取消“Generate form” (创建界面)复选框的选中状态,这样最后文件列表里就不会生成Dialog.ui文件。
Dialog.ui文件实际上是一个xml文件,在QT Creator中打开就是一个可编辑的设计界面。

3,在Dialog.h文件头,加上QT Widget的头文件。

#include <QLabel>

#include <QLineEdit>

#include <QPushButton>

。。。。。。

4,在Dialog.h头文件的类声明中,加上要使用的Widget成员,定义使用的控件对象。

class Dialog : public QDialog

{

    Q_OBJECT


public:

    Dialog(QWidget *parent = nullptr);

    ~Dialog();

private:

    QLabel *label1, *label2;

    QLineEdit *lineEdit;

    QPushButton *button;

};

C++中class的成员,默认是private,struct的成员默认是public。

O_OBJECT宏的作用是启动QT 5 元对象系统的一些特性,如支持信号和槽等,放置到类定义的私有区中。

5,在Dialog.cpp中添加如下代码:

#include "dialog.h"

#include <QGridLayout>



const static double PI = 3.1416;



Dialog::Dialog(QWidget *parent)

    : QDialog(parent)

{

    label1 = new QLabel(this);

    label1->setText(tr("请输入圆的半径:"));

    lineEdit=new QLineEdit(this);

    label2 = new QLabel(this);

    button = new QPushButton(this);

    button->setText(tr("显示对应圆的面积"));

    QGridLayout *mainLayout = new QGridLayout(this);

    mainLayout->addWidget(label1, 0, 0);

    mainLayout->addWidget(lineEdit, 0, 1);

    mainLayout->addWidget(label2, 1, 0);

    mainLayout->addWidget(button, 1, 1);

}

这个和Java的Swing类似,有layout的manger的类来帮助进行布局管理。

这里需要注意的是,这个类只是一个局部变量,完成布局操作后,这个类在构造函数结束后就析构不存在了。

开头的#include <QGridLayout>为了加入实现布局管理器的头文件。

这里不禁要说的是,对于类成员来说,如果不是基本数据结构类型或者很简单的数据类型的类,还是用指针比较方便,方便创建、初始化和修改参数等。

注:设置label的文字时,可以直接setText(“要显示的内容”),也可以使用tr函数,这个是字符串国际化的翻译translate功能。

具体使用方式请自行查阅。

6,运行,查看界面效果:

《QT桌面应用程序 - 使用布局管理器》

7,界面设计已完成,接下来添加逻辑。

打开Dialog.h文件,在类构造函数和控件成员声明后,添加代码:    

    QPushButton *button;

private slots:

    void showArea();

在diaglog.cpp中加入代码:

Dialog::Dialog(QWidget *parent)

    : QDialog(parent)

{

    label1 = new QLabel(this);

        。。。。。。。

    mainLayout->addWidget(button, 1, 1);



    connect(button, SIGNAL(clicked()), this, SLOT(showArea()));

}



void Dialog::showArea()

{

    bool ok;

    QString tempStr;

    QString valueStr = lineEdit->text();

    double valueDbl = valueStr.toDouble(&ok);

    double area = valueDbl*valueDbl*PI;

    label2->setText(tempStr.setNum(area));

}

8,运行程序。输入半径,点击“显示对应圆的面积”按钮,在label2中显示圆的面积值。

《QT桌面应用程序 - 使用布局管理器》

9,也可以使用LineEdit的textChanged信号。

增加或者替换connect语句。

connect(lineEdit, SIGNAL(textChanged(QString)), this, SLOT(showArea()));

关于connect函数,将控件的signale绑定到当前类的槽函数。

关于SIGNAL的参数,可以打开第一个参数的控件的头文件,里面有关于这个控件支持的信号定义。

    原文作者:夜流冰
    原文地址: https://blog.csdn.net/guoqx/article/details/119303307
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞