QT-常用控件(一)

目录

QWIDGET-enable属性

QWIDGET-geometry属性(几何)

[window frame的影响](#window frame的影响)

QWIDGET-windowtitle属性

QWIDGET-windowlcon属性(图标)


QWIDGET-enable属性

表示一个控件是否处于可用状态,相对概念为禁用,所谓"禁用"指的是该控件不能接收任何用户的输入事件,并且外观上往往是灰色的,如果一个 widget 被禁用,则该 widget 的子元素也被禁用。

禁用效果:

QWIDGET-geometry属性(几何)

粗浅的理解为(x,y,width,height)四个属性的统称;

Qt 中针对一些几何上的概念也进行了封装。
QPoint 表示一个点,QRect 表示一个矩形, 他们都属于是小对象, 里面的属性非常少,占用空间也小.C++中使用上述对象, 通常就会按照值的方式来传递参数了。

样例:我们期望点击对应的按钮来修改target对应的geometry。

控件函数操作操作:

当前代码实际执行的效果,是在调整左上角位置,左上角位置改变的同时,高度和宽度也同时发生了改变。

平移效果代码:

window frame的影响

Qt 中存在多种用于处理窗口位置和尺寸的 API,且不同 API 基于的坐标系原点有所不同,同时在特定阶段调用这些 API 会有特殊表现:

  • 从坐标系和 API 本身来看,geometry()setGeometry() 以 Widget 本体左上角为原点,不考虑窗口框架(Window frame);frameGeometry()setFrameGeometry() 以窗口框架左上角为原点,会考虑窗口框架。
cpp 复制代码
Widget::Widget(Qwidget*parent)
    :OWidget(parent)
    ,ui(new Ui::widget)
{
    ui->setupui(this);

    QRect rect1=this->geometry();
    ORect rect2=this->frameGeometry();
    qDebug()<< rect1;
    qDebug()<< rect2;

}
  • 从代码运行阶段的情况来看,若在 Widget 类的构造函数中(此时 Widget 对象正在构造,还未被加入到窗口框架),直接针对 Widget 对象使用 geometryframeGeometry 并通过 qDebug() 输出结果,能观察到二者返回的位置尺寸信息存在区别。
  • 进行链接并运行后,结果如下图所示:

QWIDGET-windowtitle属性

需要注意,下图使用方法并不正确。

关键问题:QPushButton 调用 setWindowTitle 无意义

setWindowTitle 是用于设置 ** 窗口(QWidget 及其顶层子类,如 QMainWindowQDialog 等)** 的标题,显示在窗口的标题栏上。

QPushButton 是 "按钮部件",不是独立的窗口(它是依附于父窗口存在的子部件),调用 button->setWindowTitle("通过按钮设置窗口标题") 不会有任何效果 ------ 按钮没有自己的 "标题栏" 来显示这个标题。

正确的逻辑(如果要通过按钮修改窗口标题)

应该在按钮的点击信号槽中,修改父窗口(或目标窗口)的标题。示例如下:

cpp 复制代码
// 假设当前类是 QWidget 子类(如 MainWindow)
this->setWindowTitle("这是窗口标题");

QPushButton* button = new QPushButton("按钮", this);
// 连接按钮的点击信号到自定义槽函数
connect(button, &QPushButton::clicked, this, [this]() {
    // 点击按钮时,修改"当前窗口"的标题
    this->setWindowTitle("通过按钮设置窗口标题");
});

这样,点击按钮时,整个窗口的标题栏才会更新为 "通过按钮设置窗口标题"。

总结

  • setWindowTitle 只对 "窗口级部件" 有效,子部件(如按钮、标签等)调用它不会生效。
  • 若要通过子部件(如按钮)修改窗口标题,需在子部件的交互逻辑中,操作目标窗口setWindowTitle

QWIDGET-windowlcon属性(图标)

Qt 把各种涉及到的相关概念,都封装成了 类,Qlcon 就表示一个图标,Qlcon 更推荐创建在栈上。

复制代码
 // 写法一:使用双反斜杠
    QIcon icon("C:\\icons\\example.ico"); 
    // 写法二:使用正斜杠
    // QIcon icon("C:/icons/example.ico"); 

假设图标文件 icon.png 和程序可执行文件在同一目录,直接写文件名即可:

复制代码
QIcon icon("icon.png");

qrc 机制.

这个机制就是从根本上解决上述的两个问题:

1.确保你的图片所在的路径在目标用户机器上存在
2.确保你的图片不会被用户搞没了~~

给 Qt 项目引入一个额外的 xml 文件(后缀名使用 .qrc 表示)在这个 xml 中把要使用的图片资源给导入进来,并自在 xml 中进行记录

Qt 在编译项目的时候,就会根据 qrc 中描述的图片信息, 找到图片内容, 并且提取出图片的二进制数据,把这些二进制数据转成 C++ 代码. 最终编译到 exe 里,

缺点:无法导入太大的文件。

qrc的使用

1.创建相应文件

2。导入文件资源

(1)创建虚拟目录-prefix;

(2)添加资源-点击add files;

注意:导入图片的时候,需要确保你导入的图片必须在 resource.qrc 文件的同级目录,或者同级目录中的子目录里.

代码引用:当代码中需要访问 qrc 中管理的文件时,就需要在路径上带有:前缀。

相关推荐
移远通信19 分钟前
常见问题解答
开发语言·php
初见无风23 分钟前
3.1 Lua代码中的元表与元方法
开发语言·lua·lua5.4
逻极37 分钟前
Rust流程控制(上):if_else与match模式匹配
开发语言·后端·rust
小雨下雨的雨41 分钟前
Rust专项——其他集合类型详解:BTreeMap、VecDeque、BinaryHeap
开发语言·后端·rust
渡我白衣42 分钟前
C++世界的混沌边界:undefined_behavior
java·开发语言·c++·人工智能·深度学习·语言模型
剑海风云1 小时前
JDK 26:HTTP/3 支持已可在 HTTP 客户端 API 中使用
java·开发语言·http
下一站丶1 小时前
【JavaScript性能优化实战】
开发语言·javascript·性能优化
GIS好难学1 小时前
Three.js 粒子特效实战③:粒子重组效果
开发语言·前端·javascript
景彡先生1 小时前
Python NumPy广播机制详解:从原理到实战,数组运算的“隐形翅膀”
开发语言·python·numpy
不光头强2 小时前
springDI注入
java·开发语言