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,运行,查看界面效果:
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中显示圆的面积值。
9,也可以使用LineEdit的textChanged信号。
增加或者替换connect语句。
connect(lineEdit, SIGNAL(textChanged(QString)), this, SLOT(showArea()));
关于connect函数,将控件的signale绑定到当前类的槽函数。
关于SIGNAL的参数,可以打开第一个参数的控件的头文件,里面有关于这个控件支持的信号定义。
相关文章
- 公布Qt Widgets桌面应用程序的方法
- 解决qt程序运行时的cannot create Qt for Embedded Linux data directory: /tmp/qtembedded-0出错情形
- 【QT】Qt 给已经开发好的程序快速封装成动态库
- 【QT】Qt项目demo:数据在ui界面上显示,鼠标双击可弹窗显示具体信息
- 【QT】对于Qt MSVC 2017无法编译的问题解决
- 【QT】Qt 5 的程序:打印文档
- Qt编写物联网管理平台31-用户权限管理
- Qt编写地图综合应用26-覆盖物交互
- Qt开源作品22-运行时间记录类
- Qt编写调试日志输出类带网络转发(开源)
- Qt里的原子操作QAtomicInteger,有挑战性,使用Q_ATOMIC_INT{nn}_IS_SUPPORTED测试系统是否支持
- Qt状态机框架(状态机就开始异步的运行了,也就是说,它成为了我们应用程序事件循环的一部分了)
- Qt之设置应用程序图标
- Qt之重启应用程序
- Qt中的QTableView 中的列放入Widget
- Qt编程之通过鼠标滚轮事件缩放QGraphicsView里面的Item
- Qt error ------ 'XXX' has not been declared
- Qt Quick 简单教程 - 1 (代码备忘)
- qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""