当前位置: 首页 > news >正文

Qt控件:显示控件

显示控件

  • 1. QLabel
    • 1.1 创建和基本设置
    • 1.2 常用属性和方法
      • 显示富文本和超链接
      • 显示图像
    • 1.3 示例
    • 1.4 注意事项
  • 2. QCalendarWidge
    • 2.1 创建和基本设置
    • 2.2 常用属性和方法
    • 2.3 示例
    • 2.4 注意事项

1. QLabel

在Qt中,QLabel 是用于显示文本或图像的控件,支持富文本、超链接、对齐方式等功能。

  • 功能:显示静态文本、图像、HTML富文本等内容。
  • 常用场景:界面标题、提示信息、图像展示等。
  • 特点:默认不可交互,可通过设置使其支持超链接或接受点击事件。

1.1 创建和基本设置

方法1:在Qt Designer中添加

  1. 在Qt Designer的控件面板中找到 QLabel
  2. 拖到界面上,在"属性编辑器"中设置 textalignmentpixmap 等属性。

方法2:在代码中创建

#include <QLabel>// 在窗口构造函数中创建
QLabel *label = new QLabel("Hello, World!", this);
label->setAlignment(Qt::AlignCenter);  // 文本居中对齐
label->setWordWrap(true);  // 启用自动换行

1.2 常用属性和方法

文本操作

// 设置和获取文本
void setText(const QString &text);
QString text() const;// 设置文本格式(普通文本或HTML)
void setTextFormat(Qt::TextFormat format);  // 如 Qt::RichText// 设置文本交互标志
void setTextInteractionFlags(Qt::TextInteractionFlags flags);
// 例如:Qt::TextSelectableByMouse(可选择文本)

图像操作

// 设置图像
void setPixmap(const QPixmap &pixmap);// 设置缩放策略
void setScaledContents(bool scaled);  // 图像是否缩放以适应标签大小// 获取图像
const QPixmap *pixmap() const;

外观和行为

// 设置对齐方式
void setAlignment(Qt::Alignment alignment);  // 如 Qt::AlignLeft | Qt::AlignVCenter// 设置自动换行
void setWordWrap(bool on);// 设置工具提示
void setToolTip(const QString &tip);// 设置打开外部链接
void setOpenExternalLinks(bool open);  // 对HTML中的<a>标签有效

显示富文本和超链接

// 显示HTML富文本
label->setText("<h1>标题</h1><p>这是一段<strong>加粗</strong>的文本</p>");// 显示超链接(需设置setOpenExternalLinks(true))
label->setOpenExternalLinks(true);
label->setText("<a href=\"https://www.qt.io\">Qt官方网站</a>");// 自定义超链接点击事件(不设置setOpenExternalLinks时)
label->setTextInteractionFlags(Qt::TextBrowserInteraction);
connect(label, &QLabel::linkActivated, [=](const QString &link) {qDebug() << "点击链接:" << link;
});

显示图像

// 从文件加载图像
QPixmap pixmap(":/images/logo.png");  // 资源路径或文件路径
label->setPixmap(pixmap);// 调整图像大小以适应标签
label->setScaledContents(true);// 保持图像比例的同时适应标签
QPixmap scaledPixmap = pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation
);
label->setPixmap(scaledPixmap);// 响应标签大小变化,动态调整图像
connect(label, &QLabel::resized, [=]() {QPixmap scaled = pixmap.scaled(label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation);label->setPixmap(scaled);
});

1.3 示例

#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>
#include <QPixmap>class MyWidget : public QWidget {Q_OBJECT
public:MyWidget(QWidget *parent = nullptr) : QWidget(parent) {QVBoxLayout *layout = new QVBoxLayout(this);// 普通文本标签QLabel *textLabel = new QLabel("这是一个普通文本标签", this);textLabel->setAlignment(Qt::AlignCenter);// 富文本标签QLabel *richTextLabel = new QLabel(this);richTextLabel->setText("<h2>富文本示例</h2><p>支持<strong>粗体</strong>、<em>斜体</em>和""<a href=\"https://www.qt.io\">超链接</a></p>");richTextLabel->setOpenExternalLinks(true);richTextLabel->setAlignment(Qt::AlignCenter);// 图像标签QLabel *imageLabel = new QLabel(this);QPixmap pixmap(":/images/example.png");  // 替换为实际图像路径imageLabel->setPixmap(pixmap);imageLabel->setAlignment(Qt::AlignCenter);imageLabel->setScaledContents(true);// 添加到布局layout->addWidget(textLabel);layout->addWidget(richTextLabel);layout->addWidget(imageLabel);layout->addStretch();}
};

1.4 注意事项

  • 性能考虑:频繁更新大量文本或高分辨率图像可能影响性能,可考虑使用 QLabel::setPixmap() 的缓存机制。
  • 自动换行setWordWrap(true) 会使文本根据标签宽度自动换行,但可能影响布局计算。
  • 交互性:若需要更复杂的交互(如拖放图像),可能需要继承 QLabel 并重写事件处理函数。

2. QCalendarWidge

在Qt中,QCalendarWidget 是一个用于日期选择的控件,提供月视图、年导航和日期范围限制等功能。

  • 功能:提供可视化的日历界面,允许用户选择日期。
  • 常用场景:日期选择器、日程安排、数据筛选等。
  • 信号:日期变化、选中日期等事件会发出相应信号。

2.1 创建和基本设置

方法1:在Qt Designer中添加

  1. 在Qt Designer的控件面板中找到 QCalendarWidget
  2. 拖到界面上,在"属性编辑器"中设置 selectedDateminimumDatemaximumDate 等属性。

方法2:在代码中创建

#include <QCalendarWidget>
// 在窗口构造函数中创建
QCalendarWidget *calendar = new QCalendarWidget(this);
calendar->setSelectedDate(QDate::currentDate());  // 设置当前日期为选中日期
calendar->setGridVisible(true);  // 显示网格线
calendar->setFirstDayOfWeek(Qt::Monday);  // 设置每周第一天为周一

2.2 常用属性和方法

日期操作

// 设置和获取选中日期
void setSelectedDate(const QDate &date);
QDate selectedDate() const;// 设置日期范围
void setMinimumDate(const QDate &date);
void setMaximumDate(const QDate &date);
void setDateRange(const QDate &min, const QDate &max);// 获取当前显示的月份和年份
int monthShown() const;
int yearShown() const;// 导航到指定日期
void showDate(const QDate &date);
void showToday();

外观和行为

// 设置网格可见性
void setGridVisible(bool visible);// 设置周数显示
void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format);
// 例如:QCalendarWidget::NoVerticalHeader(不显示周数)// 设置水平表头格式
void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format);
// 例如:QCalendarWidget::ShortDayNames(显示缩写,如"周一")// 设置日期文本格式
void setDateTextFormat(const QDate &date, const QString &format);

选择模式

// 设置选择模式
void setSelectionMode(QCalendarWidget::SelectionMode mode);
// 例如:QCalendarWidget::SingleSelection(单选,默认)

** 信号与槽连接**
QCalendarWidget提供多种信号,常用的有:

// 选中日期变化时发出
void selectionChanged();// 当用户点击日历上的日期时发出
void activated(const QDate &date);// 当用户双击日历上的日期时发出
void clicked(const QDate &date);// 月份或年份变化时发出
void currentPageChanged(int year, int month);

示例:连接信号与槽:

// 方式1:选中日期变化时触发
connect(calendar, &QCalendarWidget::selectionChanged, [=]() {QDate selected = calendar->selectedDate();qDebug() << "选中日期:" << selected.toString("yyyy-MM-dd");
});// 方式2:点击日期时触发
connect(calendar, &QCalendarWidget::clicked, [=](const QDate &date) {qDebug() << "点击日期:" << date.toString("yyyy-MM-dd");
});// 方式3:月份或年份变化时触发
connect(calendar, &QCalendarWidget::currentPageChanged, [=](int year, int month) {qDebug() << "切换到:" << year << "年" << month << "月";
});

日期格式和本地化

// 设置显示的日期格式
calendar->setLocale(QLocale(QLocale::Chinese, QLocale::China));  // 设置为中文环境// 自定义日期文本格式(例如:高亮今天)
QTextCharFormat todayFormat;
todayFormat.setBackground(Qt::yellow);
calendar->setDateTextFormat(QDate::currentDate(), todayFormat);

2.3 示例

#include <QCalendarWidget>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>
#include <QDate>class MyWidget : public QWidget {Q_OBJECT
public:MyWidget(QWidget *parent = nullptr) : QWidget(parent) {QVBoxLayout *layout = new QVBoxLayout(this);// 创建日历控件calendar = new QCalendarWidget(this);calendar->setGridVisible(true);calendar->setFirstDayOfWeek(Qt::Monday);// 设置日期范围(过去30天到未来30天)QDate today = QDate::currentDate();calendar->setMinimumDate(today.addDays(-30));calendar->setMaximumDate(today.addDays(30));// 创建标签显示选中日期selectedDateLabel = new QLabel("选中日期: " + today.toString("yyyy-MM-dd"), this);// 添加到布局layout->addWidget(calendar);layout->addWidget(selectedDateLabel);// 连接信号connect(calendar, &QCalendarWidget::selectionChanged, this, &MyWidget::onSelectionChanged);}private slots:void onSelectionChanged() {QDate selected = calendar->selectedDate();selectedDateLabel->setText("选中日期: " + selected.toString("yyyy-MM-dd"));}private:QCalendarWidget *calendar;QLabel *selectedDateLabel;
};

2.4 注意事项

  • 日期范围:设置合理的日期范围可避免用户选择无效日期。
  • 性能考虑:在需要处理大量日期的场景下,可通过 setDateTextFormat 预先设置格式,避免频繁更新。
  • 国际化:通过 setLocale() 确保日历显示符合当地习惯。

相关文章:

  • Python 实现Web 请求与响应
  • SpringBoot开发——Spring Boot异常处理全攻略:五大方案实战对比
  • Redis 5.0.10 集群部署实战(3 主 3 从,三台服务器)
  • 2025年系统架构师---综合知识卷
  • webpack构建速度和打包体积优化方案
  • Qt无边框界面添加鼠标事件
  • 【推理加速】TensorRT C++ 部署YOLO11全系模型
  • 车载网关设计原则 ---- 透明性与诊断可追溯性
  • 分贝计如何帮助改善睡眠环境
  • 常见排序算法详解及其复杂度分析
  • Linux 线程(中)
  • OptiStruct结构分析与工程应用:结构激励
  • (Java基础笔记vlog)Java中常见的几种设计模式详解
  • Axure系统原型设计列表版方案
  • 构建基于全面业务数据的大数据与大模型企业护城河战略
  • 安装部署配置jenkins
  • 48页 @《人工智能生命体 新启点》中國龍 原创连载
  • HJ101 输入整型数组和排序标识【牛客网】
  • JAVA8怎么使用9的List.of
  • 芯片数据手册下载网站整理
  • 潮州网站seo推广/目前常用的搜索引擎有哪些
  • 淄博北京网站建设公司/seo网站结构优化的方法
  • 网站建设前端后端/长沙网络营销学校
  • php外贸网站模板/微博营销的特点
  • 做慕课的网站/性价比高的seo网站优化
  • 深圳龙岗疫情最新消息多少例了/seo营销专员