对话框,布局管理器 http://rd.189works.com/article-53531-1.html

本文详细介绍Qt中的布局管理技术,包括水平、垂直及网格布局管理器的使用方法,并通过实例演示如何构建美观且响应式的登录界面。

下面我们以一个例子来初步了解Qt的组件定位技术,比如我们想做一个登录窗口,像下图这样,应该怎么做呢?

这还不简单嘛,在窗体上拖两个QLabel,两个QLineEdit,两个QPushButton,不就行了嘛。看起来是可以了,但是如果我们的窗口尺寸大小被改变了,那我们如何控制我们窗体上的控件的摆放始终美观合适呢?接下来让我们来学习一下Qt的布局管理器。

我们新建一个工程叫loginDlg,注意在选择基类的时候选择QDialog,而不是默认的QMainWindow,因为我们的登录窗口是个对话框嘛。

修改dialog.h头文件:

 1 #ifndef DIALOG_H
 2 #define DIALOG_H
 3 
 4 #include <QtGui/QDialog>
 5 
 6 class QLineEdit;
 7 class QLabel;
 8 class QPushButton;
 9 
10 class Dialog : public QDialog
11 {
12     Q_OBJECT
13     
14 public:
15     Dialog(QWidget *parent = 0);
16     ~Dialog();
17 private:
18     QLabel *usrLabel;
19     QLabel *pwdLabel;
20     QLineEdit *usrLineEdit;
21     QLineEdit *pwdLineEdit;
22     QPushButton *loginButton;
23     QPushButton *cancelButton;
24 };
25 
26 #endif // DIALOG_H
首先,声明四个用到的类。这里做的是前向声明,否则的话是编译不过的,因为编译器不知道这些类是否存在。简单来说,所谓前向声明就是告诉编译器,我要用这几个类,而且这几个类存在,你就不要担心它们存不存在的问题啦!
 
然后是我们的Dialog,继承自QDialog。
 
下面是一个重要的东西:Q_OBJECT。这是一个宏。凡是定义信号槽的类都必须声明这个宏。
然后是public的构造函数和析构函数声明。
然后在类的私有区(private)声明了指向QLabel,QLineEdit,QPushButton对象的指针成员。

 

一、水平布局管理器和垂直布局管理器

 

1.水平布局管理器:QHBoxLayout,按照从左到右的顺序进行添加。
2.垂直布局管理器:QVBoxLayout,安装从上到下的顺序进行添加。
使用addWidget添加好组件后,调用QWidget的setLayout把QWidget的layout设置为我们定义的这个Layout,下面结合代码来解释
dialog.cpp

 1 #include "dialog.h"
 2 #include <QLabel>
 3 #include <QLineEdit>
 4 #include <QPushButton>
 5 #include <QHBoxLayout>
 6 
 7 Dialog::Dialog(QWidget *parent)
 8     : QDialog(parent)
 9 {
10     usrLabel=new QLabel("UserName:");
11     pwdLabel=new QLabel("PassWord:");
12     usrLineEdit=new QLineEdit();
13     pwdLineEdit=new QLineEdit();
14     pwdLineEdit->setEchoMode(QLineEdit::Password);
15     loginButton=new QPushButton("Login");
16     cancelButton=new QPushButton("Cancel");
17 
18     QHBoxLayout *btnLayout=new QHBoxLayout;
19     btnLayout->addWidget(usrLabel);
20     btnLayout->addWidget(pwdLabel);
21     btnLayout->addWidget(usrLineEdit);
22     btnLayout->addWidget(pwdLineEdit);
23     btnLayout->addWidget(loginButton);
24     btnLayout->addWidget(cancelButton);
25 
26     setLayout(btnLayout);
27 }
28 
29 Dialog::~Dialog()
30 {
31     
32 }
首先包含所需的头文件
第10~16行分别创建了各个对象,调用了QLineEdit的setEchoMode方法设置了pwdLineEdit对象的内容显示方式为QLineEdit::Password,即密码显示方式。

接下来创建了一个水平布局管理器btnLayout,使用addWidget方法将之前创建的控件添加到这个布局管理器上,然后调用setLayout方法将刚刚创建的水平布局管理器添加至主窗体。运行一下:

同样如果使用垂直布局管理器的话,这些控件会从上到下排列

二、网格布局管理器

网格布局管理器QGridLayout,顾名思义就是将窗体分隔成行和列的网格来进行排列。
1     QGridLayout *gridLayout=new QGridLayout;
2     gridLayout->addWidget(usrLabel,0,0,1,1);
3     gridLayout->addWidget(usrLineEdit,0,1,1,3);
4     gridLayout->addWidget(pwdLabel,1,0,1,1);
5     gridLayout->addWidget(pwdLineEdit,1,1,1,3);
创建一个网格布局管理器QGridLayout并将控件添加到此网格布局管理器中去,此方法参数如下:
void QGridLayout::addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )

第一个参数是指要将哪个组件放到该布局管理器中,第二个参数是行,第三个是列,第四个是行的跨度,第五个参数是列的跨度。如图所示:

addWidget(usrLineEdit,0,1,1,3)此句是说将账户输入框usrLineEdit放在网格布局管理器中第0行第1列中,并且占用1行3列,以此类推。

了解了这些之后,我们将这些布局管理局根据需要嵌套起来就可以实现文章开头的那个登陆界面。
我们先来分析一下刚刚那个窗口究竟用了哪些布局?

从上图可以看出,用户名和密码以及输入框采用的是网格布局管理器,而登录和取消两个按钮采用的是水平布局管理器,最后这两个布局管理器又被添加进了垂直布局管理器,这个不难理解吧?

那接下来就是见证奇迹的时刻~

完整代码如下:

dialog.cpp

 1 #include "dialog.h"
 2 #include <QLabel>
 3 #include <QLineEdit>
 4 #include <QPushButton>
 5 #include <QGridLayout>
 6 #include <QHBoxLayout>
 7 #include <QVBoxLayout>
 8 
 9 Dialog::Dialog(QWidget *parent)
10     : QDialog(parent)
11 {
12     //创建各个所需控件
13     usrLabel=new QLabel("UserName:");
14     pwdLabel=new QLabel("PassWord:");
15     usrLineEdit=new QLineEdit();
16     pwdLineEdit=new QLineEdit();
17     pwdLineEdit->setEchoMode(QLineEdit::Password);
18     loginButton=new QPushButton("Login");
19     cancelButton=new QPushButton("Cancel");
20 
21     //将用户名和密码标签、用户名和密码输入框添加进网格布局管理器中
22     QGridLayout *gridLayout=new QGridLayout;
23     gridLayout->addWidget(usrLabel,0,0,1,1);
24     gridLayout->addWidget(usrLineEdit,0,1,1,3);
25     gridLayout->addWidget(pwdLabel,1,0,1,1);
26     gridLayout->addWidget(pwdLineEdit,1,1,1,3);
27 
28     //将登录和取消按钮添加进水平布局管理器中,并设置水平布局管理器中内部窗口部件的间隔为60
29     QHBoxLayout *btnLayout=new QHBoxLayout;
30     btnLayout->setSpacing(60);
31     btnLayout->addWidget(loginButton);
32     btnLayout->addWidget(cancelButton);
33 
34     //创建一个垂直布局管理器,设置它的边框宽带为40
35     QVBoxLayout *dlgLayout=new QVBoxLayout;
36     dlgLayout->setMargin(40);
37     dlgLayout->addLayout(gridLayout);
38     //在dlgLayout对象中加入一个大小为40的Stretch,使gridLayout和btnLayout的默认距离为40
39     dlgLayout->addStretch(40);
40     dlgLayout->addLayout(btnLayout);
41     setLayout(dlgLayout);
42     //添加信号槽连接,使得点击取消按钮程序退出
43     connect(cancelButton,SIGNAL(clicked()),this,SLOT(close()));
44 }
45 
46 Dialog::~Dialog()
47 {
48     
49 }
Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
要分析特定URL指向的CSS文件,例如 `http://rd.sz-map.com/libs/gm/gl/gl.min.css`,可以采取以下几种方法进行查看和分析: ### 1. 使用浏览器开发者工具 现代浏览器(如 Chrome、Firefox、Edge)都内置了开发者工具,可以方便地查看和分析CSS文件。 - **打开开发者工具**:按 `F12` 或 `Ctrl+Shift+I`(Windows/Linux),或者在页面上右键点击并选择“检查&rdquo;。 - **网络面板**:切换到“Network&rdquo;标签页,然后刷新页面。在列表中找到目标CSS文件 `gl.min.css`,点击它以查看详细信息。 - **查看内容**:在“Headers&rdquo;选项卡中,可以看到请求和响应头信息;在“Preview&rdquo;或“Response&rdquo;选项卡中,可以查看CSS文件的内容。 ### 2. 使用在线工具 有许多在线工具可以帮助分析CSS文件,例如: - **CSS Lint**:可以检查CSS代码中的潜在问题,并提供优化建议。 - **CSS Minifier**:如果CSS文件是压缩过的(如 `gl.min.css`),可以使用在线解压工具将其格式化以便于阅读。 - **PageSpeed Insights**:Google 提供的工具,可以分析网页性能,包括CSS加载和渲染优化。 ### 3. 使用命令行工具 如果偏好使用命令行工具,可以使用 `curl` 或 `wget` 下载CSS文件,然后使用文本编辑器或代码分析工具进行查看。 ```bash curl -O http://rd.sz-map.com/libs/gm/gl/gl.min.css ``` 下载完成后,使用文本编辑器(如 `vim`、`nano`)打开文件: ```bash vim gl.min.css ``` ### 4. 使用代码编辑器 将CSS文件下载到本地后,可以使用代码编辑器(如 Visual Studio Code、Sublime Text)打开,这些编辑器通常提供语法高亮、代码折叠等功能,便于分析和理解CSS结构。 ### 5. 分析CSS内容 一旦查看到CSS文件的内容,可以重点关注以下几个方面: - **选择器和样式规则**:了解CSS如何影响页面布局和样式。 - **媒体查询**:查看响应式设计的实现方式。 - **性能优化**:检查是否有不必要的样式规则或重复的代码。 - **外部依赖**:查看CSS文件是否引用了其他资源(如字体、图片)。 ### 示例代码:使用 Python 下载并保存 CSS 文件 以下是一个简单的 Python 脚本,用于下载并保存指定的 CSS 文件: ```python import requests url = "http://rd.sz-map.com/libs/gm/gl/gl.min.css" response = requests.get(url) with open("gl.min.css", "wb") as file: file.write(response.content) ``` 运行此脚本后,CSS 文件将被保存为本地文件 `gl.min.css`,可以使用任何文本编辑器打开进行分析。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值