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 对象使用 geometry 和 frameGeometry 并通过 qDebug() 输出结果,能观察到二者返回的位置尺寸信息存在区别。
  • 进行链接并运行后,结果如下图所示:

QWIDGET-windowtitle属性

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

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

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

而 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 中管理的文件时,就需要在路径上带有:前缀。

相关推荐
必须得开心呀4 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
沫璃染墨6 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
达子6666 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
道尔柯南7 小时前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法
楠楠子呀7 小时前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具
tachibana27 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
临床数据科学和人工智能兴趣组8 小时前
正则表达式的基础语法的基本符号
开发语言·人工智能·python·正则表达式·r语言·r语言-4.2.1·workbudyy
王中阳Go8 小时前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
geats人山人海8 小时前
java 4继承
java·开发语言
aqiu1111118 小时前
【C++算法打怪专栏】C++ `unordered_set` 常用初始化与插入方法总结
开发语言·c++·算法