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

相关推荐
Y学院4 小时前
实战项目:鸿蒙多端协同智能家居控制 App 开发全流程
开发语言·鸿蒙
ajassi20005 小时前
开源 C++ QT QML 开发(十二)通讯--TCP客户端
c++·qt·开源
dlraba8025 小时前
用 Python+OpenCV 实现实时文档扫描:从摄像头捕捉到透视矫正全流程
开发语言·python·opencv
nnnnichijou6 小时前
Qt Quick 3D-机械臂模型显示与交互
qt·3d·交互
一人の梅雨6 小时前
1688 店铺商品全量采集与智能分析:从接口调用到供应链数据挖掘
开发语言·python·php
小何好运暴富开心幸福6 小时前
C++之日期类的实现
开发语言·c++·git·bash
威风的虫6 小时前
JavaScript中的axios
开发语言·javascript·ecmascript
老赵的博客7 小时前
c++ 是静态编译语言
开发语言·c++
Terio_my7 小时前
Python制作12306查票工具:从零构建铁路购票信息查询系统
开发语言·python·microsoft