QT从入门到实战x篇_15_登录窗口布局(代码实现布局总结、手动布局实例、widget、行列形式的用栅格、弹簧调整控件与widget距离)

2023-11-14

本篇主要介绍利用代码和手动的方式创建和调整一个UI界面并进行布局调整。

关于代码实现UI界面的一些总结:
(1)设置window/dialog对象的最小尺寸、title

setMinimumSize(800, 600);
setWindowTitle(tr("My Dialog"));

(2)对于水平或者垂直布局,"addWidget(widget对象)"用于包含widget类的控件(不知道是不是widget查看父类这些)、"addLayout(布局)"用于包含布局;
(3)"布局->setMargin(); 布局->setStretch(对象1,展现时比例); 布局->setStretch(对象2,展现时比例);"调整布局关系;

MainLayout->setMargin(2);  //距离widget边沿距离为2
MainLayout->setStretch(0,1); //第一个对象与第二个对象展现时比例为1
MainLayout->setStretch(1,1); //第二个对象与第一个对象展现时比例为1

(4)在调整好布局包含关系后,切记布局都是要有对象的,即依赖的widget类对象,使用"widget类对象->setLayout(布局)"即可实现依赖关系或者说是加入widget的对象树中;另外还需要设置widget在关窗后自动销毁及是否为模态对话框的设置。

    this->setLayout(MainLayout);  //设置widget的布局属性
    this->setAttribute(Qt::WA_DeleteOnClose);//窗口关闭后,自动释放内存
    this->setModal(true); //设置是否为模态对话框 true模态 默认false 非模态

(5)实现以下界面的方法
在这里插入图片描述
代码如下:

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    initUI();
}

void Widget::initUI()
{
    m_buttonWrite = new QPushButton(QString::fromLocal8Bit("写入数据"));
    m_buttonStop = new QPushButton(QString::fromLocal8Bit("停止数据读入"));
    QHBoxLayout *operLayout = new QHBoxLayout;
    operLayout->addWidget(m_buttonWrite);
    operLayout->addWidget(m_buttonStop);
    operLayout->addStretch();

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addLayout(operLayout);
    setLayout(layout); //默认使用的是this指针,指向Widget对象
}

以下为手动布局的详情:
总结放于前: 好看的界面需要使用widget包含控件,对几行几列的使用栅格、水平、垂直、弹簧。代码实现是先生成控件对象,然后将控件摆放到widget中。

1. 首先创建一个带UI的工程文件,创建时的设置如下:
在这里插入图片描述(1)状态栏移除
此处生成的是一个mainwindow的界面,对于你不想要的状态栏等,可以在右侧中选中,右键选择移除即可。
在这里插入图片描述
只剩下一个QWidget
在这里插入图片描述
(2)利用label控件,创建一个登录名
在这里插入图片描述
(3)LineEdit控件创建一个输入框
在这里插入图片描述
同理创建出密码和按钮,但是这个时候创建出来的控件位置这些都是固定的,不会随着窗口大小而自适应。
在这里插入图片描述
(4)利用widget进行布局。
比较推荐的布局方式是利用widget进行布局,将控件拖入widget控件之中,这个时候看到widget里还是比较乱的。
在这里插入图片描述
(5)选择水平布局:
在这里插入图片描述
瞬间感觉好看很多
在这里插入图片描述
同理对其他的控件也是用widget进行布局,得到:
在这里插入图片描述
(6)对整体来个竖直方向布局:
在这里插入图片描述
虽然可以随着界面变化,看起来不美观,需要再进行调整。
调整一下整体的大小
在这里插入图片描述
(7)利用弹簧进行调整相对位置
在这里插入图片描述
(8)弹簧固定值设置
加弹簧后虽然可以跟随界面变化,但是按钮之间距离太大了,这个时候需要将中间弹簧设置为一个定值,这样就不会出现这样的问题了。
在这里插入图片描述
弹簧距离设置为定值
在这里插入图片描述
都加上弹簧之后的效果
在这里插入图片描述
(9)如何打破整体布局,取消了弹簧效果:
在这里插入图片描述
在这里插入图片描述
2. 利用栅格进行布局
(1)取消之后再添加一个widget,将“用户名”和“密码”拖入其中,因为两个可以看做两行两列的空间布局,因此选中这个widget,点击“栅格布局”。
在这里插入图片描述
(2)然后选中最大的那个widget,选择“垂直布局”,发现既对齐又布局会好很多。
在这里插入图片描述
(3)加弹簧并去除widget与控件之间空隙
再加上弹簧后的效果,但是垂直方向距离比较大,这是因为左侧每个widget与控件之间有很大空隙,怎么去除这些间隙呢?
在这里插入图片描述
选中widget,右侧中选中“sizePolicy”下的垂直策略,选中"Fixed"
在这里插入图片描述
同理操作下边的widget,再增加弹簧之后,效果如下:
在这里插入图片描述
至此,界面布局已经完成。
3. 如何进行属性设置?
(1)改变主窗口的名
在这里插入图片描述
(2)固定窗口大小设置
在这里插入图片描述
(3)设置margin属性
后来你会发现弹簧或者控件和widget有一定的间隔,这个参数即为margin,可以设置为0
在这里插入图片描述
(4)密码控件处暗码显示
在这里插入图片描述
4.学习视频地址:登录窗口布局(手动布局、widget、行列形式的用栅格、弹簧调整控件与widget距离)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT从入门到实战x篇_15_登录窗口布局(代码实现布局总结、手动布局实例、widget、行列形式的用栅格、弹簧调整控件与widget距离) 的相关文章

  • QGraphicsView 和 eventFilter

    这个问题已经困扰我两天多了 所以我想我应该问一下 我在Win7上使用Qt 4 5 3 用VC2008编译 我有 MyGraphicsView 继承 QGraphicsView 和 MyFilter 继承 QObject 类 当我将 MyFi
  • 有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

    有没有一种安全的方法可以在不调用 QApplication exec 的情况下使用 Qt 我有许多不同的对象正在对多个资源执行长期进程 至少其中一个正在与 Web 应用程序服务器进行通信 我正在制作一个 GUI 应用程序 提示用户在正确的时
  • (如何)我可以抑制未找到包配置文件的警告吗?

    我正在尝试创建一个CMakeLists txt尝试查找的文件Qt5 如果失败 则尝试回退到Qt4安装 该脚本到目前为止有效 但如果出现以下情况我总会收到警告Qt5未安装 注意FindQt5 cmake是由提供Qt5并且仅当以下情况时才可用Q
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • 如何在模型更改时停止ListView“跳跃”

    我需要做什么 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息 我设置listView positionViewAtEnd 以便跟踪最后的消息 我禁用positionViewAtEnd当我向上滚动时 我可以阅读过去的消
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • Qt 文件对话框默认后缀不起作用

    我将以下代码用于 QtQuick Dialogs 1 3 和 Qt 5 10 0 下 filedialog 的新属性 我使用 Qt Creator 5 10 默认套件构建它 import QtQuick 2 10 import QtQuic
  • 重定向 python 交互式帮助()

    我正在为使用 Qt 的应用程序开发交互式 python shell 但是我似乎无法获得重定向的交互式帮助 我的 python 代码中有这个 class OutputCatcher def init self self data def wr
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • 如何使QTableView类的restoreState()和saveState()正常工作?

    首先 我想说 我的问题已经在这里讨论过 并且这里是 https stackoverflow com questions 1163030 qt qtableview and horizontalheader restorestate 但答案并
  • Qt:如何连接到 SQLite?

    我安装了 SQLite3 解压到 c sqlite 创建了一个数据库 c sqlite mzsales 现在我试图在 QTableView 中显示其内容 QSqlDatabase db QSqlDatabase addDatabase QS
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • QML 连接:不推荐使用连接中隐式定义的 onFoo 属性

    升级到 Qt 5 15 时收到以下错误消息 QML Connections Implicitly defined onFoo properties in Connections are deprecated Use this syntax
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 如何将 zlib 添加到现有的 qt 安装中

    如何将 zlib 添加到 Qt 的现有安装中 我对此很陌生 所以请给我详细的描述 提前感谢您的帮助 zlib 包含在 Qt 核心库中 如果你想在 Qt 程序中使用 zlib 函数 你只需要包含 src 3rdparty zlib 中的 zl
  • 如何消除 QTableWidget 中的空白?

    How do I get rid of the whitespace in my application 我想摆脱 QTableWidget 中的空白 蓝色箭头 我该怎么做 这是我的应用程序的代码 gridLayout QGridLayou

随机推荐