qt 如何设计好布局和漂亮的界面。

这篇具有很好参考价值的文章主要介绍了qt 如何设计好布局和漂亮的界面。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 进群领取qt开发学习资料以及技术交流  在下方↓↓↓↓↓↓↓↓

前言

​       曾几何时,我们都在黑框框下度过,我们受够了被黑框框支配的恐惧,想要跳出去,去看看外面,我们听够了类似于界面只是皮肤,背后的代码才是王道的话语,当你觉得黑框框已经满足不了你的时候,我觉得,你是时候做出一些改变了。如果你是学习C++的,我想qt可以作为你进入界面的一条选择,这篇文章,我们不讲函数,不讲类,总之就是不讲代码,我们来讲讲代码之外,聊一聊关于怎么布局,怎么用qt做出一个漂亮的界面❤️。 ​       我在一篇讲布局博文下面看到这样一句评论:为什么非要布局,直接自己摆不是更好吗?我相信很多刚接触布局的同学,都有这种想法,当然,当初的我和你们拥有一样的想法,但是现在,这种想法我不敢再有。之所以会说出这句话,要么是刚接触界面,要么是随手点了进来,阿巴阿巴看完评论了一句。刚开始接触界面,布局确实不是那么重要,我们的软件(都称不上是软件,就是一个空壳子)一共也没几个组件,两个按钮?三个文本框?刚接触的时候,你是否考虑过软件大小随意变化的问题,你是否考虑过后期添加组件,随着我们的软件越来越庞大,让组件自动分配空间显的尤为重要。

​       分为两大板块:布局和Qt版CSS,基础在前,进阶在后,前面讲布局组件以及css语法等等,后面进行实践,并就遇到的问题进行解决,看不完,建议先收藏起来,日后根据需求查看。 使用的是Qt5.10.0版本,相关更详细的使用方法可点击下方官方文档查看❤️创作不易,您的点赞是我创造的动力。

一.布局相关组件介绍

qt漂亮的工控界面,qt,开发语言

与布局有关的就是上图红色方块所标注的三项,下面依次做说明。

1.Layouts(布局)

​  Layouts这个词,一定不陌生,布局的意思,在第一个红框框里面有一共有4种布局类型,分别是Vertical Layouts(垂直布局),Horizontal Layouts(水平布局),Grid Layouts(网络布局),Form Layouts(窗体布局)

Vertical Layouts(垂直布局)

使用了垂直布局,组件自动在垂直方向上分布。

qt漂亮的工控界面,qt,开发语言

Horizontal Layouts(水平布局)

使用了水平布局,组件自动在水平方向上分布。

qt漂亮的工控界面,qt,开发语言

Grid Layouts(网络布局)

使用了水平布局,组件自动在网格方向上分布。

qt漂亮的工控界面,qt,开发语言

Form Layouts(窗体布局)

和网格布局类似,但只有最右侧的一列网格会改变大小。

qt漂亮的工控界面,qt,开发语言

2.Spacers(空间间隔器/弹簧)

空间间隔器有两种,一种是水平的,另一种是垂直的。

qt漂亮的工控界面,qt,开发语言

Spacer有四个属性:

spacerName(名字)

orientation(决定spacer是水平间隔或垂直间隔)

sizeType(单独说)

sizeHint(该值是组件作为在布局管理器中部件的缺省大小,既建议值,也是缺省值,其他组件该值不可修改,但Spacer组件可修改,组件实际大小受部件的大小策略、sizeHint以及布局中其他部件的影响)

四个属性中,sizeType应该拿出来讲一讲:

sizeType属性说明

说明

Fixed

0

固定值策略: Qwidget.sizeHint()对应的缺省大小就是部件的固定不变大小,因此部件不能放大也不能缩小。

Minimum

GrowFlag

指定最小值策略: Qwidget. sizeHint()对应的缺省大小是最小值,不能调整部件大小到比缺省大小更小的尺寸,并且该值应该足够满足部件的展现。部件允许扩展,但是Qt并不建议扩展(例如:水平方向上的按钮)。

Maximum

ShrinkFlag

指定最大值策略: Qwidget. sizeHint()对应的缺省大小是最大值,假如其它部件需要空间并且不会破坏该部件,那么该部件允许被缩小(例如:-个分割线)。

Perferred

GrowFlag|ShrinkFlag

首选项策略: Qwidget sizeHint()对应的缺省大小是最佳效果,部件允许放大或缩小,但不建议扩展比sizeHint()大,该策略是缺省策略。

Expanding

GrowFlag|ShrinkFlag|ExpandFlag

扩展策略: Qwidget. sizeHint()对应的缺省大小是合理的大小,但部件允许缩小并且可用。部件可以利用额外的空间,因此它将会得到尽可能多的空间(例如:水平方向上的滑块)。

MinimumExpanding

GrowFlag|ExpandFlag

最小可扩展策略: Qwidget. sizeHint()对应的缺省大小是最小值,并且大小足够。部件允许使用额外空间,因此它将会得到尽可能多的空间(例如:水平方向上的滑块)。

Ignored

ShrinkFlag|GrowFlag|IgnoreFlag

Qwidget.sizeHint()对应的缺省大小将会被忽略,部件将会获取尽可能多的空间。

不出意外的话,新人可能看不懂这个说明,用通俗易懂的话说就是这个样子的:

Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。

Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以放大。

Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小的允许尺寸。

Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小。

Expandint:控件可以自行增大或者缩小。

MinimumExpanding:控件的sizeHint是它的sizeHint,但是可以使用额外的空间,也就是它会尽可能得到更多的空间。

?Ignored:控件的sizeHint不起作用,它会尽可能得到更多的空间。

所以看到这里,千万不要再说你的Spacer不能设置大小。

3.UI设计器工具栏

qt漂亮的工控界面,qt,开发语言

前四个与我们本文关系不大,不与介绍,我们来看后面剩下的。

Lay Out Horizontally:将窗体上所选组件水平布局 ?Lay Out Vertically:将窗体上所选组件垂直布局 ?Lay Out Horizontally in splitter:将窗体上所选组件用一个分割条进行水平分割布局 ?Lay Out Vertically in splitter:将窗体上所选组件用一个分割条进行垂直分割布局 ?Lay Out in a Form Layout:将窗体上所选组件窗体布局 ?Lay Out in a Grid:将窗体上所选组件网格布局 ?Break Layout:解除窗体上所选组件的布局,也就是打破布局。 ?Adjust Size:自动调整所选组件的大小。

这时候,你可能要问这里的布局和刚才的布局一样吗,是一样的,在不过在这里,可以更快速的对组件进行布局,比如下面这样:

qt漂亮的工控界面,qt,开发语言

分割布局器

至于分割布局器,默认情况下是不可用,使用方法是先选中要放入QSplitter中的控件,此时分裂布局图标变亮,然后选择水平或垂直布局器。

qt漂亮的工控界面,qt,开发语言

使用属性中的handleWidth可调节组件之间的间距。 属性中的opaqueResize默认情况下(打勾),使用鼠标拖动分割子窗口间的边界时,子窗口会动态的改变其大小。然而,如果希望在松开鼠标时才改变其大小,可以设置下面的参数,取消其勾选状态即可,效果如下(左面打勾):

qt漂亮的工控界面,qt,开发语言

关于布局相关的组件或者工具就写到这里,下面是一些我做的例子。

二.Qt样式表QSS

​       Qt自带一个纯天然的皮肤功能QSS,也就是Qt版CSS。就算没有美工你也能轻松做出酷炫的界面,完整的官方文档可查看文字开头蓝色链接,这里仅常用的语法做一个引入。

1.样式表语法

选择器类型

不知你是否经历过在一个界面设置背景图片,但界面上的组件,例如按钮的背景也会被设置为该背景图,如下图所示,这是由于选择器导致的问题。

qt漂亮的工控界面,qt,开发语言

图中的frame 被称为选择器,表示样式表的设置仅对该选择器有效。上图的frame是一个窗体的对象名,选择器若为具体的类实例对象名,应在前面使用#来表示,也可将图中的#frame改为QFrame(类型名),区别是前者仅对具体的一个窗体起作用效果,而后者是所有QFrame类及其子类都有效果。除此之外,还有以下选择器:

?QPushButton[flat=“false”]:匹配非flat的QPushButton实例。

?.QPushButton:匹配QPushButton的实例,但不匹配其子类,注意前面的点。

?QPushButton#okButton:匹配对象名称为okButton的所有QPushButton实例。

?QDialog QPushButton:匹配所有QPushButton实例,这些实例是QDialog的后代(子代等)。

?QDialog > QPushButton:匹配所有QPushButton实例,这些实例是QDialog的直接子代。

声明

QPushButton{color:rgb(255, 0, 0);} 
/*括号里面的color:rgb(255, 0, 0);被称为声明。*/
/*该语句的意思是将QPshButton类的按钮中的字体设置为红色。*/
QPushButton{background-color: rgb(0, 170, 255);}
/*该语句的意思是将QPshButton类的按钮的背景色设置为蓝色。*/

如果你照上面做了,按钮的字体颜色未编译下是可以看到的,而按钮背景可能不会显示,必须编译后才可以显示,这时可以加一句border-radius:0px;,这样按钮的背景色就会显示出来,具体原因不是很清楚。 而border-radius:0px;的意思是边框圆角半径。随着数值越来越大,按钮也越来越圆润~~,如下图。

qt漂亮的工控界面,qt,开发语言

?子控件

qt漂亮的工控界面,qt,开发语言

如上图QTabWidget组件,它的原型是下图,对于样式复杂的窗口组件(该组件又由几个小组件构成),必须访问窗口小部件的子控件,对其进行单独使用样式表,直接右键对QTabWidget使用样式表是不可用的。

qt漂亮的工控界面,qt,开发语言

例如,红色的是小部件是tab,QTabBar或QToolBox的选项卡,而蓝色的是pane,QTabWidget的窗格(框架),想达到图中效果,就需要分别设置样式表。

qt漂亮的工控界面,qt,开发语言

伪状态

伪状态是干什么的呢,就是用于界面动态效果,用来检测一系列动作,例如鼠标悬停在按钮上,鼠标按下去,这样一系列动作所产生的动态效果。

效果可能过大了哈,为了演示,这都不重要。

qt漂亮的工控界面,qt,开发语言

? 悬停:hover ? 不悬停:!hover ? 悬停并选中 :hover:checked ?悬停并按下:hover:!pressed

如果想修改图中输入框的边框颜色可以使用

border-style:solid;
border-color: rgb(170, 170, 255);

前提是将边框的风格定义为以下类型(默认类型是none,无边框,即使用了边框颜色也不会显示):

?none 定义无边框。 ?hidden 与 “none” 相同。不过应用于表时除外,对于表,hidden 用于解决边框冲突。 ?dotted 定义点状边框。在大多数浏览器中呈现为实线。 ?dashed 定义虚线。在大多数浏览器中呈现为实线。 ?solid 定义实线。 ?double 定义双线。双线的宽度等于 border-width 的值。 ?groove 定义 3D 凹槽边框。其效果取决于 border-color 的值。 ?ridge 定义 3D 垄状边框。其效果取决于 border-color 的值。 ?inset 定义 3D inset 边框。其效果取决于 border-color 的值。 ?outset 定义 3D outset 边框。其效果取决于 border-color 的值。

更多的用法就需要大家去挖掘和积累了,下面是我做的一些效果。

三.效果

qt漂亮的工控界面,qt,开发语言

qt漂亮的工控界面,qt,开发语言

qt漂亮的工控界面,qt,开发语言

qt漂亮的工控界面,qt,开发语言

qt漂亮的工控界面,qt,开发语言

 

qt漂亮的工控界面,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-557374.html

 进群领取qt开发学习资料以及技术交流  在下方↓↓↓↓↓↓↓↓ 

到了这里,关于qt 如何设计好布局和漂亮的界面。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • qt登录界面布局

    qt个人小笔记 1、主体布局 其中用户名和密码都是label标签: 用户名和密码后面的输入框都是linedit标签: 下方的登录和退出按钮都是push button标签: 2、水平操作: 将这些东西添加完成以后,要保证用户名与后面的数入框水平,密码与后面的输入框水平,登录和推出按钮水平

    2024年02月03日
    浏览(40)
  • qt界面布局之水平布局与垂直布局(QHBoxLayout, QVBoxLayout)

    QHBoxLayout 提供了一些方法,下面简单介绍一下常用方法 QVBoxLayout与QHBoxLayout使用类似,这里就不贴QVBoxLayout的代码了 void addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = Qt::Alignment()); 第一个参数可以传入一个QWidget的派生类指针类型(可以理解是待加入的控件地址) 第二个参数传

    2024年02月09日
    浏览(49)
  • 【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 战斗背景:做了个串口接收界面,用来接收传输过来的信号。但是光用数字显示太单调,需要用图线显示出来。 战略目标:干掉它。 战术路线:Qt 绘图可以使用 Qt Charts,先了解

    2024年02月11日
    浏览(52)
  • 【Visual Studio】使用 C++ 语言,配合 Qt,开发了一个串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 我要使用的功能比较简单,主要包含扫描串口、打开串口、发送数据、接收数据、暂停按钮、停止按钮,因此接下里将围绕这几个功能依次更新。 我的工程项目名字叫 “GUI”。

    2024年02月11日
    浏览(71)
  • 嵌入式 QT 界面布局管理

    目录 1、实例程序功能 2、界面组件布局 2.1 界面组件的层次关系 2.2 布局管理 2.3 伙伴关系和Tab顺序       创建一个 Widget Application 项目 samp2_2, 在创建窗体时选择基类 QDialog ,生成的类命名为 QWDialog ,并选择生成窗体。     如 此 新建 的项 目 samp2_2 有一 个界 面文 件 qwdi

    2024年02月04日
    浏览(56)
  • 【Visual Studio】报错 C2653,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在添加 Widget 做

    2024年02月11日
    浏览(54)
  • C++ Qt 学习(二):常用控件使用与界面布局

    ui 设计器设计界面很方便,为什么还要手写代码? 更好的控制布局 更好的设置 qss 代码复用 完全不会写 Qt 布局,很麻烦,怎么学会手写布局? 看 Qt 自己怎么写 改良 Qt 的布局写法 1.1 水平布局 addWidget() 在布局里添加一个控件 addLayout() 在布局里添加子布局 setMargin() 设置水平

    2024年02月06日
    浏览(55)
  • Qt中多ui使用及简单布局实现交互界面

    第一章 Qt中C++代码搭配UI文件实现交互界面 第二章 Qt中多ui使用及简单布局实现交互界面 文章目录 前言 一、新增两个新UI文件 二、使用这两个新增的UI及简单布局 三.添加简单联动逻辑 四.编译运行及动态效果展示 总结         前一段时间,写了一篇关于Qt中C++代码搭配

    2024年02月04日
    浏览(56)
  • 【Qt】使用Qt designer(Qt设计师)以及uic工具将ui文件转换到C++代码进行界面开发

    【Qt】编写第一个Qt程序,使用Cmake编译并运行 Qt Designer是一个用于创建Qt应用程序用户界面的图形化界面设计器。它是Python GUI开发的一个重要工具,可以帮助用户快速创建具有丰富功能的用户界面。 打开终端输入以下代码 点击创建 拖一些组件进来,点击保存 得到一个后缀为

    2024年02月16日
    浏览(54)
  • QT自定义优雅的表单控件,简单实现设置界面布局

    FormView.h FormView.cpp 核心函数 函数 变量 功能 addEditableItem title: 输入框前面的提示文字,同时作为该控件的标识符 place_holder: 输入框中的提示文字 在表单中插入一个可填写项 addCheckableItem title: 不显示在UI中,仅作为该控件的标识符 content: 勾选框后面的内容 init_status: 勾选框的初

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包