QT 常用部件 之窗体篇 widget 属性(一)

2023-10-27

这里介绍的是widget 窗体的属性

最完整的属性请查看qt自带的帮助文档,这里之拿了一部分做说明



窗体属性:

object name:物件名称

qwidget:enable 使能本部件

geometry:窗口位置和大小设置


sizepolicy:

1. Fixed: 大小不能改变

2. Minimum: 已经是最小, 不能再被缩小, 但能放大.

3. Maximum: 已经是最大, 不能再被放大, 但能缩小.

4. Preferred: 控件的sizeHint()是他的sizeHint, 能被缩小, 放大.

5. Expanding: 控件可以自行增大或者缩小.

Preferred与Expanding的区别: 当有Preferred与Expanding的控件时, 只有Expanding的会被缩小与放大, Preferred的控件使用其sizeHint()作为大小, 大小不发生变化.

sizepolicy:

minisize:最小尺寸

maxsize:最大尺寸

sizeincrement:0*0

basesize:基本大小默认为0 与sizeincrement设置有关

palette:


font:字体

cursor:鼠标形状

mousetracking:

focuspolicy:获取焦点方式(tab键,单击,前两者,。。)

contextmenupolicy:

acceptdrops:支持drop事件

windowtitle:窗体标题

icon:窗体图标左上角的那个

windowopacity:

autofillbackground:自动填充背景色

stylesheet:样式

local:归属地


其他常用属性:

visible                 fullscreen                focus               clearfocus       enabled

show()                 hide()                 raise()               lower()                         close()

MOVEEVENT()     RESIZEEVENT()


注意點:

1,编写程序时,初始化窗体时最好不要使用setGeometry()函数,而用resize()和move()代替,因为使用setGeometry()会导致窗体show()之后再错误的位置上停留很短暂的时间,带来闪烁现象!

Warning: Calling setGeometry() inside resizeEvent() or moveEvent() can lead to infinite recursion.

See the Window Geometry documentation for an overview of geometry issues with windows.

By default, this property contains a value that depends on the user's platform and screen geometry.

Access functions:

const QRect & geometry () const
void setGeometry ( int x, int y, int w, int h )
void setGeometry ( const QRect & )

See also frameGeometry(), rect(), move(), resize(), moveEvent(), resizeEvent(), minimumSize(), and maximumSize().



2,窗体位置初始化问题:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // this->geometry() is the same here...
    setWindowState(Qt::WindowMaximized);
    ui->webView->setGeometry(0, 60, geometry().width(), geometry().height()-60);
    // ...as it is here.
}

As you may be able to tell, I'm trying to start the application with the window maximized and the QWebView also maximized. Basically, whenever the main window is resized, I also want to call ui->webView->setGeometry with the update height and width. But MainWindow::geometry doesn't seem to be updating. What am I doing wrong?

up vote 1 down vote accepted

I would have to double check, but your geometry might not get updated properly until your main window gets a show event.

However, I would suggest you put your QWebView inside of a layout instead of trying to size it manually every time your main window changes size.

answered  Jul 30 at 19:25
Chris
1,459 10
 
OK, would a grid layout make the most sense in this case? –  Nick  Jul 30 at 19:41
 
You should be fine with a QBoxLayout or QStackedLayout. The 60 pixels margin can be set with the parent widget's setContentsMargins() function. –  Stefan Majewsky  Jul 30 at 20:16

3,设置实例:

MyWidget::MyWidget(QWidget *parent): QWidget(parent)
 {
     setFixedSize(200, 120);
 }


The QWidget::setGeometry() call sets both the widget's screen position and the size. It is equivalent to calling QWidget::move() followed by QWidget::resize().

4,层次问题

Qt中各个widget前后位置的设置

在Qt中,所有问题都要一分为二,讨论两种不同的情况:一个是最常用的QWidget体系,而另外一个则是QGraphicsWidget体系。

      ①:在常用的QWidget体系中,设置前后位置是主要是用raise(),underStack(),hide()函数。

      理论为:在Qt中每个widget窗口都维持着自己的一个创建栈(widget's stack.),栈里边存放的是该窗口所有子widget窗口的标识符(代表其各个子widget)。当创建一个子widget后,系统便会将将代表其的标识符压入其父widget的创建栈中。而这各个子widget显示的前后顺序择是:栈顶的在最上边,栈底的最下边。所以:后压入栈的显示在上边,先入栈的在下边。 由此可知:后创建的子widget会显示出来!

那么:当我们创建了多个有重叠的子widget之后,最后创建的那个肯定是我们看到的那个。

       那如何改变这种先后顺序呢?对于一个子widget,我们可以直接调用raise()函数来让其升到栈顶,从而显示在最上边用户面前,而不至于被遮挡;  当然我们也可以用underStack()来让其处于某个子widget下边,从而来指定前后顺序。

      按照经验来看,其实只要使用raise()函数就足够了,需要显示谁,就直接让其调用raise()即可!!

      ②:对于QGraphicsWidget体系而言:

           其内部放的是各个item,对于他们而言:我们是直接可以用setZValue()来设置各个item之间的前后位置。

当然:还有一种混合情况,亦即:一个QGraphicsScene,其中既可以 用addItem()来加入item;也可以addWidget()来加入QWidget对象。 此时对于这种既有item,又有Qwidget的情况,该如何定义彼此之间的前后位置呢?

     其实当我们用addWidget()来想scene中加入QWidget时:该函数是有一个返回值的,为QGraphicsProxyWidget*类型指针。亦即:当我们调用addWidget()这个函数时,其一共做了两步操作:

                                 一:系统首先把你原先的QWidget对象给转换成“item对象”。

                                 二:而后再将这个转换后生成的item放到scene场景中。

      但是其第一步操作中转换生成的“item对象”和真正的item对象还是不一样的,转换生成的仅仅是真正item的一种代理形式!即:生成了一个QGraphicsProxyWidget类型的代理item !!  但是对于这个代理item,我们也可以用setZValue()来设置其前后位置啦!

      总结起来就是说:混合情况下,我们用addWidget()向一个scene场景中加入普通QWidget时,会返回一个QGraphicsProxyWidget*类型指针(其代表真正放入这个scene中的代理item),我们完全可以用它来调用setZValue()来设置前后位置,这样其便和普通Item的前后位置设置方式相统一一致了!!

(本条知识点来自 http://hi.baidu.com/zorru/blog/item/e24fbf0e6a8c4adb7bcbe19b.html



 5`窗体居中显示

原文地址:Qt 设置窗口居中显示作者:springbird
设置窗口居中显示
方法一:在窗口(QWidget类及派生类)的构造函数中添加如下代码:
#include <QDesktopWidget>
//.......
QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以
move((desktop->width() - this->width())/2, (desktop->height() - this->height())/2);
//.......
重新编译后,该窗口启动时在屏幕居中的位置。



方法二:在调用show()函数后调用move()函数,j将窗口移动到屏幕中央。
#include <QDesktopWidget>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;


    w.move ((QApplication::desktop()->width() - w.width())/2,(QApplication::desktop()->height() - w.height())/2);

    w.show();


    return a.exec();
}


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

QT 常用部件 之窗体篇 widget 属性(一) 的相关文章

  • Qt 相当于 .NET 数据绑定吗?

    Qt 中是否有相当于 NET 数据绑定的功能 我想使用引用数据库中特定实体的 QString 填充一些组合框和其他小部件 但是 如果我可以将数据绑定到这些字符串 而不是基于新的组合框选择再次查询数据库 或者基于构建我自己的将使用 QStri
  • Qt:将数字转换为 QString、QVariant 或 QString::number 哪个更好

    我只是好奇 比方说 我需要在控制台中输出一个数字 代码是 include
  • QByteArray 到整数

    正如您可能从标题中看出的那样 我在转换QByteArray为一个整数 QByteArray buffer server gt read 8192 QByteArray q size buffer mid 0 2 int size q siz
  • QT:模块“QtWebView”未安装

    我的操作系统是win10 QT版本是Qt5 7 mingw53 32 目标操作系统是win10 当我使用qmlscene执行qml文件时 发生了一些错误 qrc qml 3 模块 QtWebView 未安装 我的 qml 文件如下 impo
  • 将 JavaFX 按钮放置在特定位置

    我的问题是如何将 javafx 按钮放置在特定位置 我一直尝试执行这个简单的代码 结果是按钮仅位于屏幕中心 而不是我想要的位置 我正在使用 StackPane Code Button button new Button button set
  • 相对文件路径的区别:Qt Creator的调试模式和发布模式

    QFile file test txt if file open QIODevice ReadOnly qDebug lt lt You got me 我在用 Qt 4 8 6 与 MSVC 2010 Qt 创建者 3 1 1 Window
  • Qt 5.3 QPlainTextEdit 更改 QTextCursor 颜色

    我想更改下面的光标颜色QPlainTextEdit小部件 我能够将其宽度设置为6 但我想改变颜色或者它 是否可以 QFontMetrics fm font setCursorWidth fm averageCharWidth setCurs
  • PyQt5 使动态小部件可点击并将参数传递给另一个函数

    我正在尝试制作动态小部件并使它们可点击 通过单击一个小部件 它应该将动态值传递给其他小部件 我尝试过 sender 和其他访问小部件的选项 但没有任何效果 所有小部件都从最后一个小部件发送信息 下面是代码 import sys from P
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何安装 C++ 的 VOCE?

    我正在尝试安装 VOCE api 它是为 C 和 Java 构建的语音识别 API 这是我第二次使用外部 C 库 也是第一次使用 Java C api 语音链接 http voce sourceforge net http voce sou
  • 通过信号/槽将 QVector 从工作线程传递到主线程

    目前 我在将 QVector 传递到线程之间时遇到一些麻烦 目前我有一个主线程 GUI Thread 和一个频繁发出 QVector 数组的工作线程 在向量内直接发出数据之前看起来不错 接收者是主线程中的一个槽 但该槽接收到的数据是乱码 这
  • 如何在div中制作非活动内容?

    如何制作一些内容div使用 JavaScript 阻止非活动状态 假设有一个带有 启用 禁用 命令的按钮 并且有一个带有一些文本的 div 块 当按下 启用 禁用 按钮时 是否为 启用 您可以使用里面的内容 但是当 禁用 时 您不能使用di
  • 仅使 QTreeWidgetItem 的一列可编辑

    我有一个QTreeWidgetItem有两列数据 有什么办法可以只让第二列可编辑吗 当我执行以下操作时 QTreeWidgetItem item new QTreeWidgetItem item gt setFlags item gt fl
  • Qt,颜色选择器对话框?

    Qt 是否有如下所示的颜色选择器对话框 它还需要有一个 OnColorChanged 信号 当选定的颜色发生变化时会调用该信号 我想在他们改变颜色时提供实时预览 这就是原因 使用谷歌我只能找到这个 它是一个圆边上的三角形 我个人认为它看起来
  • Qt 覆盖小部件快捷方式(窗口快捷方式)

    我有一个 Qt 应用程序 其中在 Qt Designer 表单操作中定义了多个窗口快捷方式 这些快捷键效果很好 直到焦点位于处理相同组合的小部件上 覆盖我的窗口快捷键 时按下它们 我想要相反的行为 窗口快捷方式覆盖聚焦的小部件快捷方式 我尝
  • Qt - 如何在保留选中状态的同时禁用 QCheckBox?

    我有一个带有两个复选框的对话框 我们称它们为 A 和 B 当未选中 A 时 B 应该能够根据用户的需要进行切换 当 A 被选中时 B 不应该能够被切换 现在 我的对话框构造函数中有以下内容 connect ui gt A SIGNAL to
  • 更改 QGraphicsView 中的光标

    我正在尝试更改 a 的光标QGraphicsView而ScrollHandDrag已开启 但似乎不起作用 如果禁用 我可以更改光标ScrollHandDrag但不是在它处于活动状态时 我不知道我可能做错了什么 下面是重现该问题的代码的一部分
  • Qt 中的智能指针[重复]

    这个问题在这里已经有答案了 就像已经写过一样here http blog qt digia com 2009 08 25 count with me how many smart pointer classes does qt have Q
  • 在Android上动态添加imageView

    我想显示 HTML 中的图像 并且使用以下命令获取图像 url 源Jsoup 但是 一个问题是每个帖子都有不同数量的图片 所以 我无法修复 xml 布局中 ImageView 的数量 经过研究 我知道我可以动态创建 ImageView 所以
  • 如何禁用滚轮事件 QGraphicsView Qt C++ 上的滚动功能

    我有一个图形视图 并且我设置了自己的功能 以便在用户按下 Control 并单击鼠标时手动拖动滚动 我已经删除了滚动条 但鼠标滚轮仍然会滚动 甚至滚动到显示在图像中的图像qGraphicsView显示我的手拖动没有的空白 白色 空间 我怎样

随机推荐

  • C++ 常量

    常量是固定值 在程序执行期间不会改变 这些固定的值 又叫做字面量 常量可以是任何的基本数据类型 可分为整型数字 浮点数字 字符 字符串和布尔值 常量就像是常规的变量 只不过常量的值在定义后不能进行修改 整数常量 整数常量可以是十进制 八进制
  • 企业微信cgi-bin/gateway/agentinfo接口存在未授权访问漏洞 附POC

    文章目录 企业微信cgi bin gateway agentinfo接口存在未授权访问漏洞 附POC 1 企业微信cgi bin gateway agentinfo接口简介 2 漏洞描述 3 影响版本 4 fofa查询语句 5 漏洞复现 6
  • GNU汇编程序中的分段(.section伪操作)

    GNU汇编程序中的分段 lt 1 gt section伪操作 section Starts a new code or data section Sections in GNU are called text a code section
  • JQ插件OrgChart实现组织结构图

    最近在做一个OA系统的组织结构图 需求如下 第一眼看起来让人联想到脑图 思维导图大家都比较熟悉 但这不是脑图 是组织结构图 有添加 编辑 删除等功能 随后我就找了一些插件 1 jsMind 脑图 查看文档 jsMind目前有左右伸展的 没有
  • docker镜像和仓库

    文章目录 一 docker镜像 1 镜像的分层结构 1 分层结构案例 2 容器层详解 2 镜像的构建 1 创建一个Dockerfile 2 构建镜像 3 查看镜像的分层结构 4 镜像的缓存特性 3 Dockerfile基本语法 1 dock
  • mysql 5.7安装详细步骤(图片+文字,图片为主)【软件安装+环境配置】

    首先双击软件开始安装 加载完成出现这个页面 选择Custom gt next 找到并选择x64位的 点击绿色箭头 选中 gt 更改安装位置 我安装的是T盘 你们可以安装在D盘 E盘等等 不建议C盘 C盘崩了数据就损坏 Mysql gt ne
  • 调用阿里云语音合成Python版SDK

    一 阿里云介绍 阿里云创立于2009年 是全球领先的云计算及人工智能科技公司 致力于以在线公共服务的方式 提供安全 可靠的计算和数据处理能力 让计算和人工智能成为普惠科技 阿里云服务着制造 金融 政务 交通 医疗 电信 能源等众多领域的领军
  • 简单四边形不等式优化dp(下)

    广义决策单调性 强烈推荐题解视频 设 f k i f k i fk i 表示前
  • 【腾讯云的1001种玩法】JavaWeb项目部署指南

    腾讯云技术社区 博客主页持续为大家呈现云计算技术文章 欢迎大家关注 作者 刘潇龙 如何快速直接地在腾讯云上部署JavaWeb项目 第一步 登录 我选了ubuntu系统 账户是ubuntu 于是在终端里 ssh ubuntu aa bb cc
  • poj 2096 Collecting Bugs

    Problem poj org problem id 2096 vjudge net contest 151678 problem Q Reference blog csdn net xingyeyongheng article detai
  • 导出一个schame并排除不必要的表

    由于测试的需要 下午收到一个邮件 要求搭建一个测试环境 使用expdp导数据的时候 将数据量大于1千万的表只导一部分 其他的表全部导出 然后看了一下要导出的表一共有545张 然而有大概30多张表的数据量大于1千万行 表那么都 不可能一张一张
  • 线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?

    matlab中如何应用regress 函数进行线性回归分析 回归分析是研究一个随机变量与一个或多个普通变量之间的相关系的统计方法 如果做回归分析 有很多软件都已经封装好了的 我们只需直接调用就可以了 例如Matlab中的regress 就是
  • 视频监控智能分析之火焰检测原理

    一 应用背景 基于视频分析的室内 室外烟火自动检测预警系统的目的是能够实现无人值守的不间断工作 自动发现监控区域内的异常烟雾和火灾苗头 以最快 最佳的方式进行告警和协助消防人员处理火灾危机 并最大限度的降低误报和漏报现象 同时还可查看现场实
  • AI实战营第二期——第一次作业:基于RTMPose的耳朵穴位关键点检测

    文章目录 题目 基于RTMPose的耳朵穴位关键点检测 背景 任务 数据集 训练目标检测器 错误 NameError name unicode is not defined 评估目标检测器 训练关键点检测器 评估关键点检测器 模型轻量化转换
  • USB——眼图测试常识

    最近的项目外设的USB总是传输数据异常 供应商建议我们做USB眼图测试 对于纯软件出身的我对USB本身都知之甚少 更别提眼图了 赶紧补课 如果将被测信号输入示波器 并且当示波器的触发时钟和被测信号同步时 在示波器上显示的图形很象人的眼睛 因
  • 持安科技入选CCIA2023年中国网安产业潜力之星!

    近日 中国网络安全产业联盟 CCIA 公布2023年中国网安产业潜力之星 持安科技作为零信任领域明星创业公司 成功入选榜单 中国网络安全产业联盟 CCIA 自2023年3月份启动网络安全企业发展情况调研工作 本次调研延续前五次产业调研模式
  • VSCODE设置自动换行后仍然无法在视区宽度内自动换行

    问题 百度如何设置vscode在视区内自动换行 查到的是设置word wrap设置为 on 即可 但我设置后仍然无法在视区宽度内自动换行 原因 设置错误 在vscode选项里搜索 wordwrap 会出现两个结果 第一个是Diff edit
  • 2017.5.27测试 2. 刷题(P1167)

    2 刷题 c pas cpp c 题目背景 好啊 一言为定 作为蒟蒻的GJY竟然约定和神犇来一场世纪大战 题目描述 GJY在期末的时候跟神犇约定了一次战争 这对于GJY来说可是一件具有挑战性并十分困难的事情 所有GJY从现在开始就要努力学习
  • linux安装nodejs,并切换版本

    之前使用linux系统centos7中遇见nodejs版本过低的问题 想要切换版本可以阅读以下参考 yum update 安装nodejs命令 yum install nodejs 查看node版本号 node v 查看npm版本号 npm
  • QT 常用部件 之窗体篇 widget 属性(一)

    这里介绍的是widget 窗体的属性 最完整的属性请查看qt自带的帮助文档 这里之拿了一部分做说明 窗体属性 object name 物件名称 qwidget enable 使能本部件 geometry 窗口位置和大小设置 sizepoli