news 2026/1/29 2:22:00

【QT】3.QWidget控件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【QT】3.QWidget控件

目录

1. enabled:是否可用状态

2. geometry:位置与大小

3. windowFrame:窗口框架

4. windowTitle:窗口标题

5. windowIcon:窗口图标

6. qrc 资源文件机制

7. windowOpacity:窗口透明度

8. cursor:修改光标

9. font:字体相关

10. toolTip:提示文本

11. focusPolicy:焦点策略

12. styleSheet:样式表(仿CSS的QSS)


1.enabled:是否可用状态

  • 禁用状态:控件不接受用户输入(如点击)。

  • 一个父控件被禁用,其所有子控件也会被禁用。

  • 示例:用按钮控制另一个按钮的可用状态。

    void Widget::on_pushButton_clicked() { this->setWindowTitle("开"); } void Widget::on_pushButtonEnabled_clicked() { bool fl = ui->pushButton->isEnabled(); if(fl) { ui->pushButton->setEnabled(false); } else { ui->pushButton->setEnabled(true); } }

2.geometry:位置与大小

  • 是四个属性的统称:x,y(左上角坐标),widthheight

  • QT 将它们封装在一个QRect类里。

  • 注意:如果只修改x,y坐标,按钮的大小不会改变,只是位置移动。但如果只使用geometry()获取矩形然后修改y坐标并设置回去,按钮可能会被拉伸或压缩。这是因为setY()方法只是改变了矩形的y值,而没有保持高度。

  • 正确示例:移动按钮。

    void Widget::on_up_clicked() { auto rec = ui->pushButton->geometry(); ui->pushButton->setGeometry({rec.x(), rec.y()-10, rec.width(), rec.height()}); } void Widget::on_down_clicked() { auto rec = ui->pushButton->geometry(); ui->pushButton->setGeometry({rec.x(), rec.y()+10, rec.width(), rec.height()}); } void Widget::on_left_clicked() { auto rec = ui->pushButton->geometry(); ui->pushButton->setGeometry({rec.x()-10, rec.y(), rec.width(), rec.height()}); } void Widget::on_right_clicked() { auto rec = ui->pushButton->geometry(); ui->pushButton->setGeometry({rec.x()+10, rec.y(), rec.width(), rec.height()}); }

3.windowFrame:窗口框架

  • Widget窗口顶端显示“Widget”字母的细条,就是windowFrame框架。

  • 有些 API 以窗口客户区(不含边框)的左上角为(0, 0),有些则以包含边框的整个窗口左上角为(0, 0)

    QRect r1 = this->geometry(); // 客户区矩形 QRect r2 = this->frameGeometry(); // 包含窗口框架的矩形 qDebug() << r1; qDebug() << r2;
  • 注意:如果在构造函数中直接打印,可能会得到(0, 0),因为此时窗口的界面可能尚未完全构造出来。应在按钮事件等窗口显示后再获取。

  • 结果示例

    QRect(560,264 800x600) // geometry QRect(559,219 802x646) // frameGeometry
    • 可以看出,左右各有 1 像素边框,上方标题栏高度为 46 像素。

4.windowTitle:窗口标题

  • 设置顶层窗口标题栏的文字。

  • 注意:只能对顶层窗口(如Widget)设置,对按钮等子控件设置是无效的。

    // 错误示例,不会生效 QPushButton* q1 = new QPushButton(this); q1->setWindowTitle("1");

5.windowIcon:窗口图标

  • 设置窗口左上角或任务栏上显示的小图标。

  • 使用QIcon类管理图标。

    QIcon q1("d:\\1.png"); // Windows路径,注意转义 this->setWindowIcon(q1);
  • 注意点

    • 之前按钮等控件通常用指针创建在堆上,但QIcon可以直接放在栈上。

      • 原因1:按钮等需要确保生命周期与父窗口一致,因此需要托管给 QT 的对象树。

      • 原因2QIcon是一个轻量级对象,创建并设置给窗口后,即使局部QIcon对象析构,图标资源已经加载,不影响显示。且QIcon没有setParent方法,无法放入对象树。

    • 路径写法:

      • 可以使用 C++11 的原始字符串(Raw String)避免转义:QIcon q1(R"(d:\1.png)");

      • 在 QT 中,路径分隔符也可以使用/QIcon q1("d:/1.png");

  • 问题:使用绝对路径不灵活,因为不同电脑路径不同,且图片可能被用户删除。解决方案:使用 QT 的资源文件 (qrc)机制。

6.qrc资源文件机制

  • QT 资源文件(后缀.qrc)是一个 XML 文件,用于记录项目中的资源(如图片)。

  • 编译时,QT 会将资源文件中的资源数据(如图片)以二进制形式编译进最终的可执行文件(.exe)中。

  • 优点:程序运行时无需依赖外部文件,不会被用户误删。

  • 缺点:不适合嵌入过大的文件,会导致可执行文件体积膨胀。

  • 使用步骤

    1. 在项目上右键 -> 添加新文件 -> QT ->Qt Resource File,创建.qrc文件。

    2. 将图片文件复制到项目目录下(通常是.qrc文件同级或子目录)。

    3. 在 QT Creator 中双击.qrc文件,点击“添加”->“添加前缀”,再“添加”->“添加文件”,选择图片。
      https://media/image1.png

  • 代码中使用

    QIcon q1(":/1.png"); // 冒号开头,然后是前缀(如果设置了)和文件名 setWindowIcon(q1);
  • 编译后,会在构建目录生成一个qrc_*.cpp文件,里面包含了资源的二进制数据。

7.windowOpacity:窗口透明度

void Widget::on_pushButton_clicked() { // 增加透明度(变得更透明) float f = this->windowOpacity(); f += 0.1; if (f > 1.0) f = 1.0; this->setWindowOpacity(f); } void Widget::on_pushButton_2_clicked() { // 减少透明度(变得更不透明) float f = this->windowOpacity(); f -= 0.1; if (f < 0.0) f = 0.0; this->setWindowOpacity(f); }

8.cursor:修改光标

  1. 属性面板修改:在 QT Designer 右侧属性编辑器的cursor栏目下方可以直接选择预设光标。

  2. 代码修改为预设光标

    this->setCursor(Qt::WaitCursor); // 设置为等待(转圈)光标

  3. 自定义光标图标

    QPixmap p(":/tu.png"); // 加载图片资源 this->setCursor(p); // 设置为光标 // 还可以缩放图片 p = p.scaled(10, 10);

9.font:字体相关

  • family:字体样式(如“宋体”、“Arial”)。

  • pointSize:字体大小(单位是“点”,px)。

  • weight:字体粗细。范围是 0~99。bold属性是布尔值,对应weight约为 75(粗)和非粗体(约 50)。

  • underline:是否有下划线。

  • italic:是否倾斜。

  • strikeOut:是否有删除线。

10.toolTip:提示文本

  • 鼠标悬停在控件上时显示的简短解释文字。​​​​​​​

    ui->yes->setToolTip("这是yes按钮"); ui->yes->setToolTipDuration(2000); // 设置显示时间,单位毫秒 ui->no->setToolTip("这是no按钮"); ui->no->setToolTipDuration(2000);

11.focusPolicy:焦点策略

  • 设置控件如何获得焦点(如文本框可以被什么方式激活)。​​​​​​​

  • 常见选项:

    • StrongFocus:可以通过鼠标点击和键盘Tab键获得焦点。

    • ClickFocus:只能通过鼠标点击获得焦点。

    • TabFocus:只能通过键盘Tab键获得焦点。

    • NoFocus:不能获得焦点。

12.styleSheet:样式表(仿CSS的QSS)

  • 使用类似 CSS 的键值对语法来修改控件的外观(颜色、边框、背景等)。

// 设置背景色为白色 this->setStyleSheet("background-color:white;"); // 设置文本编辑框背景为白色,文字为黑色 ui->textEdit->setStyleSheet("background-color:white;color:black");
  • 示例:实现简单的白天/黑夜模式切换

    void Widget::on_pushButton_clicked() { // 白天模式 this->setStyleSheet("background-color:rgb(240,240,240);"); ui->textEdit->setStyleSheet("background-color:white;color:black;"); ui->pushButton->setStyleSheet("color:black;"); ui->pushButton_2->setStyleSheet("color:black;"); } void Widget::on_pushButton_2_clicked() { // 黑夜模式 this->setStyleSheet("background-color:black;"); ui->textEdit->setStyleSheet("background-color:black;color:white;"); ui->pushButton->setStyleSheet("color:white;"); ui->pushButton_2->setStyleSheet("color:white;"); }
  • 可以使用rgb(r, g, b)或十六进制颜色码(如#F0F0F0)来表示颜色。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/27 22:08:00

Katalon Studio快捷键使用指南

在软件测试领域,效率往往意味着项目能否按时交付,以及测试人员能否从重复性操作中解放出来,专注于更核心的逻辑与异常场景设计。对于使用Katalon Studio进行自动化测试的工程师而言,熟练使用键盘快捷键是一个简单却常被忽视的“效率加速器”。本文将系统梳理Katalon Studio…

作者头像 李华
网站建设 2026/1/29 0:59:01

计算机毕业设计springboot高校电动车充电桩管理系统 基于SpringBoot架构的高校校园智慧充电设施运维服务平台 SpringBoot驱动的高校电动车辆能源补给与设备监控管理系统

计算机毕业设计springboot高校电动车充电桩管理系统 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着环保理念深入人心与新能源技术日趋成熟&#xff0c;电动车辆已成为高校师…

作者头像 李华
网站建设 2026/1/27 22:04:53

面了个腾讯30k出来的,让我见识到什么叫“精通MySQL调优”

就在昨天我在百忙之中抽出空余时间面试了个腾讯30k出来的&#xff0c;我开口就是&#xff1a;MYSQL性能调优如何入手&#xff1f;他的回答的&#xff1a;基础优化、优化的哲学、优化需求、优化的思路、存储引擎层、数据库优化、等等细节&#xff0c;好吧我承认我败了。 但是我严…

作者头像 李华
网站建设 2026/1/29 2:16:08

Java计算机毕设之基于springboot的汽车维修保养服务信息系统基于Java springboot4s店车辆管理系统车辆预约保养维修(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/1/27 21:58:16

广东老板:说真的!我家白裙子靠6张图,在夏天卖断货了!

做电商的朋友们&#xff0c;你们有没有同感&#xff1f;&#xff01;我家的白色镂空蛋糕裙&#xff0c;去年挂在那儿无人问津&#xff0c;今年用了潮际好麦的「商品套图」功能&#xff0c;直接卖到库存告急&#xff01;这效果真的出乎意料&#xff01;不是我说大话&#xff0c;…

作者头像 李华