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

QT的部件

 下面的内容由ai生成

模型视图架构

Qt 的模型视图架构(Model-View Architecture)是一种数据与界面分离的设计模式,核心目的是将数据的管理(模型)与数据的显示(视图)解耦,使同一组数据可以通过不同视图展示,且数据的修改不会影响视图的实现,反之亦然。这种架构极大提升了代码的灵活性、复用性和可维护性。

核心组成:模型(Model)、视图(View)、委托(Delegate)

Qt 的模型视图架构由三个核心组件构成,它们通过标准接口交互,彼此独立又协同工作:

组件作用核心类示例
模型(Model)管理数据本身,提供统一接口供视图访问数据,负责数据的增删改查和通知更新。QAbstractItemModel(基类)、QStandardItemModelQStringListModel
视图(View)负责数据的可视化展示,不存储数据,通过模型接口获取数据并渲染。QListView(列表)、QTableView(表格)、QTreeView(树形)
委托(Delegate)处理视图中数据的编辑和显示样式,允许自定义单元格的渲染和编辑逻辑。QItemDelegateQStyledItemDelegate(默认)

工作原理:组件间的交互方式

  1. 数据访问:视图通过模型提供的标准接口(如 data()rowCount() 等)获取数据,无需关心数据的具体存储方式(数组、数据库、文件等)。
  2. 数据更新通知:当模型中的数据发生变化(新增、删除、修改),模型会发射信号(如 dataChanged()rowsInserted())通知视图,视图接收信号后自动刷新显示。
  3. 用户交互处理:用户在视图上的操作(如点击、编辑)会被视图转发给委托或直接通过模型接口修改数据(如 setData()),确保数据变更被模型记录。

核心类与继承关系

  • 模型基类QAbstractItemModel 是所有模型的抽象基类,定义了通用接口(如数据获取、行 / 列计数、信号等)。派生类包括:

    • QStringListModel:简单列表数据(字符串列表)。
    • QStandardItemModel:通用的表格 / 树形数据模型,可自定义单元格数据。
    • QSqlTableModel:与数据库表关联的模型(Qt SQL 模块)。
    • 自定义模型:继承 QAbstractItemModel 实现特定数据逻辑(如网络数据、复杂结构数据)。
  • 视图类:均继承自 QAbstractItemView,针对不同数据结构优化:

    • QListView:展示列表数据(一维)。
    • QTableView:展示表格数据(二维,行 + 列)。
    • QTreeView:展示树形数据(层级结构,如文件系统)。
  • 委托类:默认使用 QStyledItemDelegate(支持样式表),可通过继承 QAbstractItemDelegate 自定义渲染和编辑逻辑(如滑块、复选框作为单元格编辑器)。

项目视图

List view清单视图

继承自QAbstractItemView,用于以列表形式展示数据模型;支持单列或多列显示、图标视图、流视图等不同的显示模式;适用于需要呈现线性结构的数据列表的情况。

使用示例
Widget::Widget(QWidget *parent): QWidget(parent)    
{resize(480, 600);//模型QStringListModel *listMode = new QStringListModel(QStringList()<< "运动类:篮球、足球" << "娱乐类:看电影、写小说、听音乐"<< "游戏类:五子棋、扑克牌、中国象棋"<<"旅游类:国外旅游、国内旅游");//视图setWindowTitle("list view 测试");QListView *listview = new QListView(this);listview->resize(400,300);listview->setModel(listMode);
}

显示结果

Tree view树视图

继承自 QAbstractItemView,用于以树状结构展示数据模型;支持展开和折叠节点、排序、多列显示等功能;适用于需要呈现层次化数据结构的情况

Widget::Widget(QWidget *parent): QWidget(parent)
{resize(480, 600);//1  初中部QList<QStandardItem *> items;QStandardItem *Item1 = new QStandardItem("1");QStandardItem *Item2 = new QStandardItem("初中部");items.push_back(Item1);items.push_back(Item2);//11 一年级QList<QStandardItem *> items1;QStandardItem *Item11 = new QStandardItem("11");QStandardItem *Item22 = new QStandardItem("一年级");items1 << Item11 << Item22;Item1->appendRow(items1);//111 一班  122  二班QList<QStandardItem *> items2;Item11->appendRow(items2<<new QStandardItem("111")<<new QStandardItem("一班"));QList<QStandardItem *> items3;Item11->appendRow(items3<<new QStandardItem("122")<<new QStandardItem("二班"));//模型QStandardItemModel *model = new QStandardItemModel();model->appendRow(items);model->setHorizontalHeaderLabels(QStringList()<<"编号"<<"初中部|高中部");//视图QTreeView *TreeView = new QTreeView(this);TreeView->setModel(model);TreeView->resize(300,400);
}

显示结果

Table View表视图

继承自 QAbstractItemView,用于以表格形式展示数据模型;支持表格视图的交互操作,如编辑、选择、排序、过滤等;适用于需要呈现二维表格数据的情况

使用示例
#include "widget.h"#include <QTableView>
#include <QHBoxLayout>
#include <QStandardItemModel>Widget::Widget(QWidget *parent): QWidget(parent)
{resize(600, 480);//3、创建模型对象QStandardItemModel *model = new QStandardItemModel;//5、设置表头
//    model->setHorizontalHeaderLabels(QStringList() << "学号"
//                                     << "姓名" << "性别" << "分数");model->setHorizontalHeaderItem(0, new QStandardItem("学号"));model->setHorizontalHeaderItem(1, new QStandardItem("姓名"));model->setHorizontalHeaderItem(2, new QStandardItem("性别"));model->setHorizontalHeaderItem(3, new QStandardItem("分数"));//4、添加数据setItemmodel->setItem(0, 0, new QStandardItem("191102"));model->setItem(0, 1, new QStandardItem("杨逍"));model->setItem(0, 2, new QStandardItem("男"));model->setItem(0, 3, new QStandardItem("680"));model->setItem(1, 0, new QStandardItem("191101"));model->setItem(1, 1, new QStandardItem("张三丰"));model->setItem(1, 2, new QStandardItem("男"));model->setItem(1, 3, new QStandardItem("700"));model->setItem(2, 0, new QStandardItem("191103"));model->setItem(2, 1, new QStandardItem("赵敏"));model->setItem(2, 2, new QStandardItem("女"));model->setItem(2, 3, new QStandardItem("748"));//1、创建视图对象QTableView *tabView = new QTableView;//2、关联视图对象与模型对象tabView->setModel(model);tabView->setEditTriggers(QAbstractItemView::NoEditTriggers);tabView->sortByColumn(0, Qt::AscendingOrder);//设置布局QHBoxLayout *hLayout = new QHBoxLayout;hLayout->addWidget(tabView);setLayout(hLayout);}Widget::~Widget()
{
}

显示结果

项目部件

用于显示和处理数据的常用部件。适用于表格数据、树形数据和列表数据的展示与交互

List Widget列表部件

在 Qt 中,QListWidget 是一种用于显示和管理列表项的便捷部件,属于 “项部件”(Item Widgets)家族,专为简单的列表场景设计。它内部集成了数据存储和显示功能(自带默认模型),无需手动关联外部模型,适合快速实现如 “文件列表”“选项列表” 等简单需求。

一、QListWidget 的核心特点

  • 自带模型:无需像 QListView 那样手动绑定模型(QAbstractItemModel),内部已封装好数据管理逻辑,开箱即用。
  • 支持多种项类型:可显示文本、图标,甚至自定义部件(如按钮、复选框等)。
  • 简化操作:提供直观的 API 用于添加、删除、修改列表项,适合初学者或简单场景。

二、基本使用方法(代码实现)

以下是通过代码创建 QListWidget 并添加列表项的示例:

#include <QApplication>
#include <QListWidget>
#include <QListWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 1. 创建ListWidget部件QListWidget listWidget;listWidget.setWindowTitle("QListWidget 示例");listWidget.resize(300, 200);// 2. 添加列表项(文本)listWidget.addItem("第一项");listWidget.addItem("第二项");listWidget.addItem("第三项");// 3. 添加带图标的项(需先准备图标资源)QListWidgetItem *iconItem = new QListWidgetItem(QIcon(":/icons/star.png"), "带图标的项");listWidget.addItem(iconItem);// 4. 设置列表属性(可选)listWidget.setSelectionMode(QAbstractItemView::MultiSelection); // 允许多选listWidget.setEditTriggers(QAbstractItemView::DoubleClicked);  // 双击可编辑项// 5. 显示部件listWidget.show();return app.exec();
}

显示结果

三、在 Qt Designer 中使用

  1. 拖放部件:从左侧 “部件箱” 中找到 List Widget,拖到界面上。
  2. 添加项
    • 右键列表 → “编辑项目...” → 在弹出的对话框中点击 “+” 添加文本项。
    • 若需添加图标,可在属性编辑器中选中项,设置 icon 属性(需先通过 .qrc 资源文件导入图标)。
  3. 设置属性:在右侧属性编辑器中修改常用属性:
    • selectionMode:选择模式(单选、多选等)。
    • editTriggers:编辑触发方式(双击、回车等)。
    • viewMode:显示模式(列表 ListMode 或图标 IconMode)。

四、常用操作与 API

功能核心方法 / 属性
添加项addItem(const QString &text)(文本项)
addItem(QListWidgetItem *item)(自定义项)
插入项insertItem(int row, const QString &text)(在指定行插入)
删除项takeItem(int row)(移除并返回项,需手动释放内存)
clear()(清空所有项)
获取选中项selectedItems()(返回选中项列表,QList<QListWidgetItem*>
currentItem()(返回当前焦点项)
设置项属性QListWidgetItem::setIcon(const QIcon &icon)(图标)
QListWidgetItem::setData(int role, const QVariant &value)(自定义数据)
切换显示模式setViewMode(QListWidget::ListMode)(列表)或 IconMode(图标)

五、信号与槽(响应交互)

QListWidget 提供了丰富的信号,用于响应用户操作,例如:

#include <QApplication>
#include <QListWidget>
#include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QListWidget listWidget;listWidget.addItem("苹果");listWidget.addItem("香蕉");listWidget.addItem("橙子");listWidget.setWindowTitle("信号与槽示例");listWidget.show();// 1. 点击项时触发QObject::connect(&listWidget, &QListWidget::itemClicked, [](QListWidgetItem *item) {QMessageBox::information(nullptr, "提示", "你点击了:" + item->text());});// 2. 项被修改时触发(需先开启编辑模式)listWidget.setEditTriggers(QAbstractItemView::AnyKeyPressed); // 按任意键可编辑QObject::connect(&listWidget, &QListWidget::itemChanged,[](QListWidgetItem *item) {QMessageBox::information(nullptr, "提示", "项已修改为:" + item->text());});return app.exec();
}

六、与 QListView 的区别

场景推荐使用 QListWidget推荐使用 QListView
复杂度简单列表(文本、图标,无需复杂数据逻辑)复杂数据(动态更新、多视图共享数据、数据库关联)
灵活性低(自带模型,定制化弱)高(可绑定自定义模型,支持复杂交互)
易用性高(API 简单,适合快速开发)中(需理解模型视图架构)

总结

QListWidget 是 Qt 中快速实现列表功能的 “利器”,适合简单场景(如静态选项列表、文件列表展示)。如果需要更灵活的数据管理(如实时更新、多视图共享数据),则应考虑使用 QListView 配合模型(如 QStringListModel)。

在 Qt 中,QTreeWidget 是用于展示树形层级结构数据的便捷部件(属于 Item Widgets 家族),特别适合呈现具有父子关系的数据(如文件系统、分类列表、组织架构等)。它自带内置模型,无需手动关联外部模型,使用简单直观,适合快速开发。

QTreeWidget

一、QTreeWidget 的核心特点

  • 树形层级结构:由「项(QTreeWidgetItem)」组成,每个项可以包含子项,形成多级嵌套(如 “父项→子项→孙项”)。
  • 自带数据管理:内部封装了数据存储逻辑,无需像 QTreeView 那样手动绑定 QAbstractItemModel,开箱即用。
  • 支持丰富样式:每个项可设置文本、图标、复选框等,还能通过样式表自定义外观。

二、基本使用方法(代码实现)

以下示例展示如何创建 QTreeWidget 并构建一个简单的树形结构(如 “水果分类”):

#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 1. 创建TreeWidget部件QTreeWidget treeWidget;treeWidget.setWindowTitle("QTreeWidget 示例");treeWidget.resize(400, 300);// 可选:设置列数(默认1列,多列可用于展示更多信息,如“名称-数量”)treeWidget.setColumnCount(2);treeWidget.setHeaderLabels(QStringList() << "名称" << "数量"); // 设置列标题// 2. 创建顶层项(一级节点)QTreeWidgetItem *fruitItem = new QTreeWidgetItem(QStringList() << "水果");QTreeWidgetItem *vegItem = new QTreeWidgetItem(QStringList() << "蔬菜");// 添加顶层项到树部件treeWidget.addTopLevelItem(fruitItem);treeWidget.addTopLevelItem(vegItem);// 3. 为顶层项添加子项(二级节点)fruitItem->addChild(new QTreeWidgetItem(QStringList() << "苹果" << "5个"));fruitItem->addChild(new QTreeWidgetItem(QStringList() << "香蕉" << "3个"));vegItem->addChild(new QTreeWidgetItem(QStringList() << "西红柿" << "2个"));vegItem->addChild(new QTreeWidgetItem(QStringList() << "黄瓜" << "4个"));// 4. 展开所有节点(可选)treeWidget.expandAll();// 5. 显示部件treeWidget.show();return app.exec();
}

三、在 Qt Designer 中使用

  1. 拖放部件:从左侧 “部件箱” 拖入 Tree Widget 到界面。
  2. 设置列数与标题
    • 在属性编辑器中修改 columnCount 设置列数(如 “2”)。
    • 右键树形部件 → “编辑标题...” → 输入列标题(如 “名称”“数量”)。
  3. 添加项
    • 右键树形部件 → “添加顶级项” 创建一级节点。
    • 选中一个项,右键 → “添加子项” 创建其子节点。
    • 双击项可直接编辑文本,或在属性编辑器中修改 text 属性(多列时需指定列索引,如 text[0] 为第一列文本)。

四、常用操作与 API

功能核心方法 / 属性
添加顶层项addTopLevelItem(QTreeWidgetItem *item)
插入顶层项insertTopLevelItem(int index, QTreeWidgetItem *item)
为项添加子项QTreeWidgetItem::addChild(QTreeWidgetItem *child)
删除项takeTopLevelItem(int index)(删除顶层项)
QTreeWidgetItem::takeChild(int index)(删除子项)
clear()(清空所有项)
获取选中项selectedItems()(返回选中项列表,QList<QTreeWidgetItem*>
currentItem()(返回当前焦点项)
设置项属性QTreeWidgetItem::setIcon(int column, const QIcon &icon)(设置图标)
QTreeWidgetItem::setText(int column, const QString &text)(设置文本)
QTreeWidgetItem::setCheckState(int column, Qt::CheckState state)(设置复选框)
展开 / 折叠节点expandItem(QTreeWidgetItem *item)(展开)
collapseItem(QTreeWidgetItem *item)(折叠)
expandAll() / collapseAll()(全部展开 / 折叠)

五、信号与槽(响应交互)

QTreeWidget 提供多种信号响应用户操作,例如点击、双击、项状态变化等:

#include <QApplication>
#include <QTreeWidget>
#include <QMessageBox>
#include <QTreeWidgetItem>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTreeWidget treeWidget;treeWidget.setColumnCount(1);treeWidget.setWindowTitle("信号与槽示例");// 添加带复选框的项QTreeWidgetItem *item1 = new QTreeWidgetItem(QStringList() << "选项1");item1->setCheckState(0, Qt::Unchecked); // 第一列添加复选框treeWidget.addTopLevelItem(item1);// 1. 点击项时触发(获取项的文本和层级)QObject::connect(&treeWidget, &QTreeWidget::itemClicked,[&treeWidget](QTreeWidgetItem *item, int column) {QString text = item->text(column);// 获取项的层级(顶层项为0,子项为1,以此类推)int level = 0;QTreeWidgetItem *parent = item->parent();while (parent) {level++;parent = parent->parent();}QMessageBox::information(nullptr, "提示", QString("点击了:%1(层级:%2)").arg(text).arg(level));});// 2. 复选框状态变化时触发QObject::connect(&treeWidget, &QTreeWidget::itemChanged,[](QTreeWidgetItem *item, int column) {if (item->checkState(column) == Qt::Checked) {QMessageBox::information(nullptr, "提示", item->text(column) + " 已勾选");} else {QMessageBox::information(nullptr, "提示", item->text(column) + " 已取消勾选");}});treeWidget.show();return app.exec();
}

六、与 QTreeView 的区别

场景推荐使用 QTreeWidget推荐使用 QTreeView
数据复杂度简单树形结构(静态或少量动态数据,如配置列表)复杂树形数据(动态更新、多视图共享、数据库关联)
灵活性低(自带模型,定制化有限)高(可绑定自定义模型,支持复杂业务逻辑)
易用性高(API 简单,适合快速开发)中(需理解模型视图架构)

总结

QTreeWidget 是快速实现树形结构的理想选择,适合展示层级关系明确的简单数据(如文件列表、分类菜单)。其核心是通过 QTreeWidgetItem 构建父子关系,并利用丰富的 API 和信号实现交互。如果需要处理复杂动态数据(如实时更新的树形数据库),则应使用 QTreeView 配合自定义模型(如 QAbstractItemModel 子类)。

Table Widget

在 Qt 中,QTableWidget 是用于展示和管理二维表格数据的便捷部件(属于 Item Widgets 家族),适合快速实现类似 “Excel 表格”“数据列表” 的界面。它自带内置模型,无需手动关联外部模型,每个单元格由 QTableWidgetItem 对象管理,支持文本、图标、复选框等内容,使用简单直观。

一、QTableWidget 的核心特点

  • 二维表格结构:由行(row)和列(column)组成,每个单元格通过「行号 + 列号」定位(索引从 0 开始)。
  • 自带数据管理:内部封装了表格数据的存储逻辑,无需像 QTableView 那样绑定 QAbstractItemModel,开箱即用。
  • 丰富的单元格功能:支持设置文本、图标、对齐方式、复选框,甚至可嵌入其他部件(如按钮、下拉框)。

二、基本使用方法(代码实现)

以下示例展示如何创建 QTableWidget 并填充数据(如 “学生信息表”):

#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHeaderView> // 用于设置表头样式int main(int argc, char *argv[]) {QApplication app(argc, argv);// 1. 创建TableWidget部件QTableWidget tableWidget;tableWidget.setWindowTitle("学生信息表");tableWidget.resize(600, 300);// 2. 设置行列数int rowCount = 3;    // 3行数据int colCount = 4;    // 4列(学号、姓名、性别、年龄)tableWidget.setRowCount(rowCount);tableWidget.setColumnCount(colCount);// 3. 设置表头(列标题)QStringList headers;headers << "学号" << "姓名" << "性别" << "年龄";tableWidget.setHorizontalHeaderLabels(headers);// 4. 填充单元格数据// 第0行tableWidget.setItem(0, 0, new QTableWidgetItem("2023001"));tableWidget.setItem(0, 1, new QTableWidgetItem("张三"));tableWidget.setItem(0, 2, new QTableWidgetItem("男"));tableWidget.setItem(0, 3, new QTableWidgetItem("18"));// 第1行tableWidget.setItem(1, 0, new QTableWidgetItem("2023002"));tableWidget.setItem(1, 1, new QTableWidgetItem("李四"));tableWidget.setItem(1, 2, new QTableWidgetItem("女"));tableWidget.setItem(1, 3, new QTableWidgetItem("19"));// 第2行QTableWidgetItem *ageItem = new QTableWidgetItem("20");ageItem->setTextAlignment(Qt::AlignCenter); // 单元格文本居中tableWidget.setItem(2, 0, new QTableWidgetItem("2023003"));tableWidget.setItem(2, 1, new QTableWidgetItem("王五"));tableWidget.setItem(2, 2, new QTableWidgetItem("男"));tableWidget.setItem(2, 3, ageItem);// 5. 优化表格样式(可选)tableWidget.horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 列宽自适应tableWidget.verticalHeader()->setVisible(false); // 隐藏行号// 6. 显示表格tableWidget.show();return app.exec();
}

三、在 Qt Designer 中使用

  1. 拖放部件:从左侧 “部件箱” 拖入 Table Widget 到界面。
  2. 设置行列数:在属性编辑器中修改 rowCount(行数)和 columnCount(列数)。
  3. 设置表头
    • 右键表格 → “编辑水平表头” → 输入列标题(如 “学号”“姓名”)。
    • 如需隐藏行号,在属性编辑器中设置 verticalHeaderVisible 为 false
  4. 填充数据
    • 双击单元格直接输入文本。
    • 选中单元格后,在属性编辑器中修改 text 等属性(需先选中单元格对应的 QTableWidgetItem)。

四、常用操作与 API

功能核心方法 / 属性
设置行列数setRowCount(int rows)setColumnCount(int cols)
设置表头setHorizontalHeaderLabels(const QStringList &labels)(水平表头)
setVerticalHeaderLabels(...)(垂直表头)
添加 / 删除行insertRow(int row)(插入行)
removeRow(int row)(删除行)
setRowCount(0)(清空所有行)
设置单元格内容setItem(int row, int col, QTableWidgetItem *item)
获取单元格内容item(int row, int col)->text()(需先判断 item 不为 nullptr)
合并单元格setSpan(int row, int col, int rowSpan, int colSpan)(从 (row,col) 开始,合并 rowSpan 行、colSpan 列)
设置选择模式setSelectionMode(QAbstractItemView::SelectionMode)(如单选单元格、选中整行等)
设置编辑权限setEditTriggers(QAbstractItemView::EditTriggers)(如禁止编辑、双击编辑等)

五、高级用法:单元格嵌入控件

QTableWidget 支持在单元格中嵌入其他部件(如按钮、复选框、下拉框),通过 setCellWidget() 实现:

#include <QApplication>
#include <QTableWidget>
#include <QPushButton>
#include <QCheckBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTableWidget table(2, 2); // 2行2列table.setWindowTitle("嵌入控件示例");table.setHorizontalHeaderLabels(QStringList() << "操作" << "状态");// 第0行第0列:嵌入按钮QPushButton *btn = new QPushButton("点击");table.setCellWidget(0, 0, btn);// 第0行第1列:嵌入复选框QCheckBox *checkBox = new QCheckBox("已完成");checkBox->setChecked(true);checkBox->setAlignment(Qt::AlignCenter); // 居中显示table.setCellWidget(0, 1, checkBox);// 调整列宽table.horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);table.show();return app.exec();
}

六、信号与槽(响应交互)

QTableWidget 提供多种信号响应用户操作,例如单元格点击、内容修改、选择变化等:

#include <QApplication>
#include <QTableWidget>
#include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QTableWidget table(2, 2);table.setHorizontalHeaderLabels(QStringList() << "A" << "B");table.setItem(0, 0, new QTableWidgetItem("数据1"));table.setItem(0, 1, new QTableWidgetItem("数据2"));table.show();// 1. 点击单元格时触发QObject::connect(&table, &QTableWidget::cellClicked,[](int row, int col) {QMessageBox::information(nullptr, "提示", QString("点击了第%1行,第%2列").arg(row+1).arg(col+1));});// 2. 单元格内容修改时触发(需允许编辑)table.setEditTriggers(QAbstractItemView::DoubleClicked); // 双击可编辑QObject::connect(&table, &QTableWidget::itemChanged,[](QTableWidgetItem *item) {QMessageBox::information(nullptr, "提示", QString("第%1行第%2列修改为:%3").arg(item->row()+1).arg(item->column()+1).arg(item->text()));});return app.exec();
}

七、与 QTableView 的区别

场景推荐使用 QTableWidget推荐使用 QTableView
数据复杂度简单表格(静态数据、少量交互,如配置表、信息展示)复杂表格(动态数据、多视图共享、数据库关联,如实时更新的报表)
灵活性低(自带模型,定制化有限)高(可绑定自定义模型,支持复杂业务逻辑)
易用性高(API 简单,适合快速开发)中(需理解模型视图架构)

总结

QTableWidget 是快速实现表格功能的理想选择,适合展示静态或简单动态的二维数据(如学生信息表、商品列表)。其核心是通过 QTableWidgetItem 管理单元格,并支持嵌入控件增强交互。如果需要处理复杂动态数据(如数据库表、实时更新的统计数据),则应使用 QTableView 配合自定义模型(如 QStandardItemModel 或 QAbstractTableModel 子类)。

输入部件

QComboBox

在 Qt 中,QComboBox(组合框,又称下拉框)是一种融合了按钮与下拉列表的复合部件,用于在有限空间内提供多个选项供用户选择。它既可以展示当前选中项,又能通过下拉展开所有选项,适合选项数量不多且需要节省界面空间的场景(如 “性别选择”“日期筛选” 等)。

一、QComboBox 的核心特点

  • 双重形态:默认显示当前选中项(类似按钮),点击后展开下拉列表(展示所有选项)。
  • 支持编辑:可设置为 “可编辑模式”,允许用户直接输入文本(不仅限于选择预设选项)。
  • 轻量灵活:相比 QListWidget 更节省空间,适合选项数量较少的场景(通常不超过 10 个)。

二、基本使用方法(代码实现)

以下示例展示如何创建 QComboBox 并添加选项,以及获取用户选择的结果:

#include <QApplication>
#include <QComboBox>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口和布局QWidget window;window.setWindowTitle("QComboBox 示例");QVBoxLayout *layout = new QVBoxLayout(&window);// 1. 创建组合框QComboBox *comboBox = new QComboBox();// 2. 添加选项comboBox->addItem("选项1");comboBox->addItem("选项2");comboBox->addItem("选项3");// 添加带图标的选项(需先准备图标资源)comboBox->addItem(QIcon(":/icons/star.png"), "带图标的选项");// 3. 设置默认选中项(索引从0开始)comboBox->setCurrentIndex(1); // 默认选中"选项2"// 4. 添加标签用于显示选择结果QLabel *label = new QLabel("当前选择:" + comboBox->currentText());// 5. 关联信号与槽(选择变化时更新标签)QObject::connect(comboBox, &QComboBox::currentTextChanged,[label](const QString &text) {label->setText("当前选择:" + text);});// 布局管理layout->addWidget(comboBox);layout->addWidget(label);window.resize(300, 150);window.show();return app.exec();
}

三、在 Qt Designer 中使用

  1. 拖放部件:从左侧 “部件箱” 拖入 Combo Box 到界面。
  2. 添加选项
    • 右键组合框 → “编辑项目...” → 在弹出的对话框中点击 “+” 添加选项文本。
    • 若需添加图标,选中某选项后,在属性编辑器中设置 icon 属性(需通过 .qrc 资源文件导入图标)。
  3. 设置属性
    • currentIndex:设置默认选中项的索引(0 为第一个选项)。
    • editable:设置为 true 可开启编辑模式(允许用户输入文本)。
    • maxCount:限制最大选项数量。

四、常用操作与 API

功能核心方法 / 属性
添加选项addItem(const QString &text)(文本选项)
addItem(const QIcon &icon, const QString &text)(带图标选项)
addItems(const QStringList &items)(批量添加)
插入选项insertItem(int index, const QString &text)(在指定索引插入选项)
删除选项removeItem(int index)(删除指定索引的选项)
clear()(清空所有选项)
获取 / 设置选中项currentText()(获取当前选中的文本)
currentIndex()(获取当前选中项的索引)
setCurrentIndex(int index)(设置选中项)
setCurrentText(const QString &text)(通过文本设置选中项)
开启编辑模式setEditable(bool editable)(设为 true 后,用户可直接输入文本)
获取编辑文本lineEdit()->text()(编辑模式下,获取用户输入的文本,需先判断 isEditable() 为 true

五、信号与槽(响应交互)

QComboBox 提供多个信号响应用户操作,常用的有:

信号触发时机
currentIndexChanged(int index)选中项的索引发生变化时(初始设置默认项时也会触发)
currentIndexChanged(const QString &text)选中项的文本发生变化时(重载版本,直接传递文本)
activated(int index)用户选择某选项时(点击下拉列表中的选项,初始设置默认项时不触发)
editTextChanged(const QString &text)编辑模式下,用户输入的文本发生变化时

示例(区分 currentIndexChanged 和 activated):

#include <QApplication>
#include <QComboBox>
#include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);QComboBox comboBox;comboBox.addItems({"A", "B", "C"});comboBox.setWindowTitle("信号差异示例");comboBox.show();// 1. currentIndexChanged:索引变化时触发(包括初始设置)QObject::connect(&comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),[](int index) {qDebug() << "currentIndexChanged:索引" << index;});// 2. activated:用户主动选择时触发(初始设置不触发)QObject::connect(&comboBox, QOverload<int>::of(&QComboBox::activated),[](int index) {qDebug() << "activated:用户选择了索引" << index;});// 初始设置默认项(会触发 currentIndexChanged,但不触发 activated)comboBox.setCurrentIndex(1);return app.exec();
}

运行后:

  • 初始设置 setCurrentIndex(1) 会打印 currentIndexChanged:索引 1
  • 用户点击下拉列表选择其他选项时,两个信号都会触发。

六、高级用法:可编辑模式与自定义验证

当 setEditable(true) 开启编辑模式后,QComboBox 允许用户输入文本,结合验证器可限制输入格式(如数字、邮箱等):

#include <QApplication>
#include <QComboBox>
#include <QIntValidator> // 整数验证器int main(int argc, char *argv[]) {QApplication app(argc, argv);QComboBox comboBox;comboBox.setEditable(true); // 开启编辑模式comboBox.addItems({"10", "20", "30"}); // 预设选项// 添加整数验证器:限制输入为 0-100 的整数QIntValidator *validator = new QIntValidator(0, 100, &comboBox);comboBox.setValidator(validator);comboBox.setWindowTitle("可编辑组合框");comboBox.show();return app.exec();
}

七、与其他部件的对比

部件特点与适用场景
QComboBox节省空间,适合选项少(≤10 个)的场景,支持编辑
QListWidget展示所有选项,适合选项较多的场景,占用空间大
QSpinBox仅用于数字选择,支持上下箭头调整,不支持文本选项

总结

QComboBox 是 Qt 中用于选项选择的高效部件,兼具空间利用率和交互灵活性。核心优势是 “默认紧凑显示,展开后展示全部选项”,配合编辑模式和验证器可满足复杂输入需求。适合用于设置、筛选、类别选择等场景,是界面开发中的常用组件。

Font Combo Box字体组合框

在 Qt 中,QFontComboBox 是一种专门用于选择字体的组合框(继承自 QComboBox),它会自动列出系统中安装的所有字体,无需手动添加选项,特别适合需要设置文本字体的场景(如文本编辑器、富文本处理工具等)。

一、QFontComboBox 的核心特点

  • 自动加载系统字体:启动时会自动扫描并显示系统中所有可用的字体(如 “微软雅黑”“SimSun”“Arial” 等),无需手动添加字体列表。
  • 字体过滤:可通过设置过滤条件,只显示特定类型的字体(如仅显示等宽字体、 proportional 字体等)。
  • 与字体类联动:选中的字体可直接通过 QFont 类获取,方便应用到其他部件(如 QLabelQTextEdit 等)。

二、基本使用方法(代码实现)

以下示例展示如何创建 QFontComboBox,并将选中的字体应用到标签文本:

#include <QApplication>
#include <QFontComboBox>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口和布局QWidget window;window.setWindowTitle("QFontComboBox 示例");QVBoxLayout *layout = new QVBoxLayout(&window);// 1. 创建字体组合框QFontComboBox *fontCombo = new QFontComboBox();// 2. 创建标签用于展示字体效果QLabel *label = new QLabel("这是一段示例文本");label->setFont(QFont("SimSun", 14)); // 初始字体// 3. 关联信号与槽:选中字体变化时,更新标签字体QObject::connect(fontCombo, &QFontComboBox::currentFontChanged,[label](const QFont &font) {// 将选中的字体应用到标签(保留原字号,只修改字体家族)QFont newFont = label->font();newFont.setFamily(font.family()); // 仅更新字体家族label->setFont(newFont);});// 布局管理layout->addWidget(fontCombo);layout->addWidget(label);window.resize(400, 200);window.show();return app.exec();
}

三、在 Qt Designer 中使用

  1. 拖放部件:从左侧 “部件箱” 的 “输入部件” 分类中找到 Font Combo Box,拖到界面上。
  2. 设置属性
    • 在属性编辑器中,fontFilters 可设置字体过滤条件(如 AllFonts 显示所有字体,MonospacedFonts 仅显示等宽字体)。
    • currentFont 可设置初始选中的字体(在下拉框中选择即可)。

四、常用操作与 API

功能核心方法 / 属性
获取当前选中字体currentFont()(返回 QFont 对象,包含字体家族、样式等信息)
设置初始字体setCurrentFont(const QFont &font)(通过 QFont 对象设置初始选中项)
字体过滤setFontFilters(QFontComboBox::FontFilters filters)(设置过滤条件,如只显示等宽字体)
常用过滤值:AllFonts(所有字体)、ScalableFonts(可缩放字体)、MonospacedFonts(等宽字体)、ProportionalFonts(比例字体)
获取字体家族名称currentFont().family()(返回字符串,如 “微软雅黑”“Arial”)

五、信号与槽(响应字体选择变化)

QFontComboBox 最常用的信号是 currentFontChanged(const QFont &font),当用户选择的字体发生变化时触发,参数为选中的 QFont 对象,可直接用于更新其他部件的字体。

示例(打印选中的字体信息):

QObject::connect(fontCombo, &QFontComboBox::currentFontChanged,[](const QFont &font) {qDebug() << "选中的字体家族:" << font.family();qDebug() << "是否加粗:" << font.bold();qDebug() << "是否斜体:" << font.italic();});

六、与普通 QComboBox 的区别

特性QFontComboBox普通 QComboBox
选项内容自动加载系统所有字体,无需手动添加需要手动通过 addItem() 添加选项
核心用途专门用于字体选择,与 QFont 无缝联动通用选项选择,无特定数据类型关联
附加功能支持字体过滤(按类型筛选)无内置过滤功能,需手动实现

总结

QFontComboBox 是 Qt 中用于字体选择的专用部件,核心优势是自动集成系统字体列表,无需手动维护字体选项,且能与 QFont 类直接联动,方便将选中字体应用到文本显示部件。适合在文本编辑器、文档处理软件等需要设置字体的场景中使用,大幅简化了字体选择功能的开发。

在 Qt 中,QLineEdit(单行编辑框)是用于输入和显示单行文本的基础输入部件,广泛应用于需要用户输入简短信息的场景(如用户名、密码、搜索关键词、文件路径等)。它支持文本编辑、验证、格式限制等功能,是界面开发中最常用的输入控件之一。

QLineEdit

一、QLineEdit 的核心特点

  • 单行限制:只能输入单行文本(按 Enter 键通常会触发 “编辑完成” 信号,而非换行)。
  • 丰富的输入控制:支持设置只读、密码模式(输入内容显示为 * 或・)、提示文本(未输入时显示灰色提示)等。
  • 输入验证:可通过验证器(QValidator)限制输入格式(如仅允许数字、邮箱、IP 地址等)。
  • 便捷的交互:支持清除按钮、右键菜单(复制 / 粘贴)、撤销 / 重做等默认功能。

二、基本使用方法(代码实现)

以下示例展示 QLineEdit 的常见用法,包括普通输入、密码输入、提示文本和获取输入内容:

#include <QApplication>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口和布局QWidget window;window.setWindowTitle("QLineEdit 示例");QVBoxLayout *layout = new QVBoxLayout(&window);// 1. 普通单行编辑框(带提示文本)QLineEdit *normalEdit = new QLineEdit();normalEdit->setPlaceholderText("请输入用户名"); // 未输入时的提示文本layout->addWidget(normalEdit);// 2. 密码编辑框(输入内容隐藏)QLineEdit *passwordEdit = new QLineEdit();passwordEdit->setPlaceholderText("请输入密码");passwordEdit->setEchoMode(QLineEdit::Password); // 密码模式(显示为•)layout->addWidget(passwordEdit);// 3. 显示输入结果的标签QLabel *resultLabel = new QLabel("输入结果将显示在这里");layout->addWidget(resultLabel);// 4. 按钮:获取输入内容QPushButton *button = new QPushButton("获取输入");QObject::connect(button, &QPushButton::clicked,[normalEdit, passwordEdit, resultLabel]() {QString user = normalEdit->text(); // 获取用户名QString pwd = passwordEdit->text(); // 获取密码resultLabel->setText(QString("用户名:%1\n密码:%2").arg(user).arg(pwd));});layout->addWidget(button);window.resize(300, 200);window.show();return app.exec();
}

三、在 Qt Designer 中使用

  1. 拖放部件:从左侧 “部件箱” 的 “输入部件” 分类中拖入 Line Edit 到界面。
  2. 设置属性:在右侧属性编辑器中修改常用属性:
    • placeholderText:设置提示文本(如 “请输入手机号”)。
    • echoMode:设置输入显示模式(Normal 正常显示,Password 密码模式,NoEcho 完全不显示)。
    • readOnly:设为 true 可禁止编辑(仅用于显示)。
    • maxLength:限制最大输入长度(如密码最多 20 个字符)。

四、常用操作与 API

功能核心方法 / 属性
设置 / 获取文本setText(const QString &text)(设置文本)
text()(获取当前文本)
清空文本clear() 或 setText("")
设置提示文本setPlaceholderText(const QString &text)(未输入时显示的灰色提示)
密码模式setEchoMode(QLineEdit::EchoMode mode)
Normal:正常显示
Password:显示・或 *
PasswordEchoOnEdit:输入时显示,失去焦点后隐藏
NoEcho:完全不显示(如支付密码)
只读模式setReadOnly(bool readOnly)(设为 true 后无法编辑,文本呈灰色)
限制输入长度setMaxLength(int length)(如限制最多输入 11 位手机号)
选中文本selectAll()(选中所有文本)
setSelection(int start, int length)(选中指定范围文本)

五、输入验证(限制输入格式)

QLineEdit 可通过验证器(QValidator 限制输入格式,常用验证器包括:

  • QIntValidator:仅允许整数(可指定范围,如 0-100)。
  • QDoubleValidator:允许浮点数(可指定范围和小数位数)。
  • QRegExpValidator:通过正则表达式验证(如邮箱、手机号、IP 地址等)。

示例(限制输入为 11 位手机号):

#include <QApplication>
#include <QLineEdit>
#include <QRegExpValidator>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QLineEdit *phoneEdit = new QLineEdit();phoneEdit->setPlaceholderText("请输入11位手机号");// 正则表达式:1开头,后跟10位数字(共11位)QRegExp regExp("^1[3-9]\\d{9}$");// 设置验证器phoneEdit->setValidator(new QRegExpValidator(regExp, phoneEdit));layout->addWidget(phoneEdit);window.setWindowTitle("手机号验证示例");window.resize(300, 100);window.show();return app.exec();
}

六、信号与槽(响应输入事件)

QLineEdit 提供多个信号响应用户输入,常用的有:

信号触发时机
textChanged(const QString &text)文本内容发生变化时(每输入一个字符都触发)
editingFinished()编辑完成时(如按下 Enter 键、失去焦点)
returnPressed()按下 Enter 键时

示例(实时显示输入长度):

#include <QApplication>
#include <QLineEdit>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QLineEdit *edit = new QLineEdit();edit->setPlaceholderText("请输入文本...");QLabel *lengthLabel = new QLabel("当前长度:0");// 文本变化时更新长度显示QObject::connect(edit, &QLineEdit::textChanged,[lengthLabel](const QString &text) {lengthLabel->setText(QString("当前长度:%1").arg(text.length()));});layout->addWidget(edit);layout->addWidget(lengthLabel);window.show();return app.exec();
}

七、高级用法:添加动作按钮

QLineEdit 支持在编辑框内添加动作按钮(如清除按钮、搜索按钮),通过 addAction() 实现,提升交互体验:

#include <QApplication>
#include <QLineEdit>
#include <QAction>
#include <QIcon>int main(int argc, char *argv[]) {QApplication app(argc, argv);QLineEdit edit;edit.setPlaceholderText("输入后可点击清除...");// 添加清除按钮(位于编辑框右侧)QAction *clearAction = new QAction(QIcon(":/icons/clear.png"), "清除", &edit);edit.addAction(clearAction, QLineEdit::TrailingPosition); // TrailingPosition:右侧// 点击按钮时清空文本QObject::connect(clearAction, &QAction::triggered, &edit, &QLineEdit::clear);edit.show();return app.exec();
}

八、与其他输入部件的区别

部件特点与适用场景
QLineEdit单行文本输入,适合短文本(用户名、密码、关键词)
QTextEdit多行文本输入,支持富文本(段落、字体样式等)
QSpinBox仅用于数字输入,支持上下箭头调整,有范围限制
QComboBox从预设选项中选择,也可编辑(适合选项有限的场景)

总结

QLineEdit 是 Qt 中处理单行文本输入的核心部件,兼具简洁性和灵活性。通过设置属性(如密码模式、提示文本)、验证器(限制输入格式)和动作按钮(增强交互),可满足各种输入场景需求。无论是简单的文本输入还是复杂的格式验证,QLineEdit 都是界面开发中不可或缺的基础控件。

QTextEdit

在 Qt 中,QTextEdit(文本编辑框)是用于输入和显示多行文本的高级部件,支持富文本编辑(如设置字体、颜色、段落格式等),甚至可以嵌入图片、列表和表格,功能远超单行的 QLineEdit。它广泛应用于需要处理长文本的场景(如文本编辑器、日志查看器、富文本邮件编辑等)。

一、QTextEdit 的核心特点

  • 多行支持:允许输入和显示多行文本,自动换行或滚动显示。
  • 富文本编辑:支持设置文本字体、大小、颜色、加粗 / 斜体等样式,以及段落对齐、列表(有序 / 无序)等格式。
  • HTML 兼容:可解析和生成 HTML 格式文本(如 <b>粗体</b><font color="red">红色</font>)。
  • 扩展性:可嵌入图片、表格,甚至通过自定义 QTextDocument 实现复杂文档功能。
  • 便捷操作:自带右键菜单(复制 / 粘贴 / 撤销 / 重做),支持拖放文本。

二、基本使用方法(代码实现)

以下示例展示 QTextEdit 的基础用法,包括设置文本、获取内容和基本交互:

三、在 Qt Designer 中使用

  1. 拖放部件:从左侧 “部件箱” 的 “输入部件” 分类中拖入 Text Edit 到界面。
  2. 设置属性:在右侧属性编辑器中修改常用属性:
    • plainText:设置初始纯文本(忽略样式)。
    • html:设置初始富文本(HTML 格式,如 <h1>标题</h1>)。
    • readOnly:设为 true 可禁止编辑(仅用于显示长文本,如日志)。
    • lineWrapMode:设置换行模式(WidgetWidth 按部件宽度自动换行,NoWrap 不换行,通过滚动条查看)。

四、富文本编辑功能

QTextEdit 的核心优势是支持富文本编辑,可通过 QTextCursor 或 HTML 格式设置文本样式:

方法 1:通过 QTextCursor 设置样式(推荐用于代码控制)
#include <QTextCursor>
#include <QFont>
#include <QColor>// 向文本编辑框添加带样式的文本
void addStyledText(QTextEdit *edit) {QTextCursor cursor = edit->textCursor();// 设置字体(加粗、20号、红色)QFont font = cursor.charFormat().font();font.setBold(true);font.setPointSize(20);cursor.charFormat().setFont(font);cursor.charFormat().setTextColor(QColor("red"));cursor.insertText("这是加粗的红色文本\n");// 插入有序列表cursor.insertList(QTextListFormat::ListDecimal); // 1. 2. 3. 格式cursor.insertText("列表项1");cursor.insertBlock(); // 新列表项cursor.insertText("列表项2");
}
方法 2:通过 HTML 格式设置样式(简单直观)
// 直接设置HTML格式文本
textEdit->setHtml("<h1 style='color: blue;'>标题</h1>""<p>这是一段包含<b>粗体</b>和<i>斜体</i>的文本。</p>""<ul>""  <li>无序列表项1</li>""  <li>无序列表项2</li>""</ul>"
);

五、常用操作与 API

功能核心方法 / 属性
设置 / 获取纯文本setPlainText(const QString &text)(忽略样式)
toPlainText()(返回纯文本)
设置 / 获取富文本setHtml(const QString &html)(HTML 格式)
toHtml()(返回 HTML 格式文本)
清空文本clear()
插入内容insertPlainText(const QString &text)(插入纯文本)
insertHtml(const QString &html)(插入 HTML)
QTextCursor::insertImage()(插入图片)
设置只读setReadOnly(bool readOnly)true 时禁止编辑)
换行模式setLineWrapMode(LineWrapMode mode)
WidgetWidth:按部件宽度自动换行
NoWrap:不换行,通过滚动条查看
查找文本find(const QString &text)(查找并选中指定文本,返回是否找到)

六、信号与槽(响应文本变化)

QTextEdit 提供多个信号响应用户操作,常用的有:

信号触发时机
textChanged()文本内容发生任何变化时(输入、删除、格式修改等)
cursorPositionChanged()光标位置移动时
selectionChanged()选中文本范围变化时

示例(实时显示文本字数):

#include <QApplication>
#include <QTextEdit>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout *layout = new QVBoxLayout(&window);QTextEdit *textEdit = new QTextEdit();textEdit->setPlaceholderText("请输入文本...");QLabel *countLabel = new QLabel("字数:0");// 文本变化时更新字数统计(纯文本字数,不含HTML标签)QObject::connect(textEdit, &QTextEdit::textChanged,[textEdit, countLabel]() {int count = textEdit->toPlainText().length();countLabel->setText(QString("字数:%1").arg(count));});layout->addWidget(textEdit);layout->addWidget(countLabel);window.resize(400, 300);window.show();return app.exec();
}

七、高级用法:插入图片和表格

QTextEdit 支持嵌入图片和表格,通过 QTextCursor 实现:

插入图片
// 插入本地图片(需指定图片路径)
QTextCursor cursor = textEdit->textCursor();
QTextImageFormat imageFormat;
imageFormat.setName(":/images/example.png"); // 图片路径(通常通过.qrc资源文件引用)
imageFormat.setWidth(200); // 设置图片宽度
cursor.insertImage(imageFormat);
插入表格
// 插入2行3列的表格
QTextCursor cursor = textEdit->textCursor();
QTextTableFormat tableFormat;
tableFormat.setCellPadding(5); // 单元格内边距
tableFormat.setBorder(1); // 边框宽度
QTextTable *table = cursor.insertTable(2, 3, tableFormat);// 填充表格内容
table->cellAt(0, 0).firstCursorPosition().insertText("表头1");
table->cellAt(0, 1).firstCursorPosition().insertText("表头2");
table->cellAt(1, 0).firstCursorPosition().insertText("数据1");

八、与 QLineEdit 的区别

特性QTextEditQLineEdit
文本行数多行(支持自动换行或滚动)单行(无法换行)
文本样式支持富文本(字体、颜色、段落格式等)仅支持简单样式(如字体、颜色)
功能扩展可嵌入图片、表格、列表,支持 HTML无扩展功能,仅用于简单文本输入
适用场景长文本编辑(文档、日志、富文本邮件)短文本输入(用户名、密码、关键词)

总结

QTextEdit 是 Qt 中处理多行和富文本的核心部件,兼具灵活性和强大功能。无论是简单的多行文本输入,还是复杂的富文本编辑(如设置样式、插入图片 / 表格),QTextEdit 都能满足需求。通过结合 QTextCursor 和 QTextDocument,还可以实现更高级的文档处理功能(如自定义格式、语法高亮等),是开发文本编辑器、日志工具等应用的理想选择。

QPlainTextEdit 

...

http://www.dtcms.com/a/389766.html

相关文章:

  • Ubuntu20.04仿真 | iris四旋翼添加双目相机D435i
  • eSIM时代来临!iPhone Air引爆无卡化革命
  • openkylin、ubuntu22部署opencv4.8.0
  • 各省产业结构合理化-摩尔(Moore)指数 1999-2023年
  • 【win10、win11】永久关闭自动更新
  • Linux基础实践(基于Ubuntu系统)
  • 线性控制理论:线性系统状态空间
  • OpenAI最新研究:为什么语言模型会产生幻觉
  • 人工智能通识与实践 - 自然语言处理
  • Coze源码分析-资源库-创建工作流-后端源码-安全/错误/流程
  • OneTerm开源堡垒机实战(四):访问授权与安全管控
  • 【赵渝强老师】基于PostgreSQL的MPP集群:Greenplum
  • leetCode算法题记录:27.移除元素
  • 自动化运维工具ansible
  • Roo Code 设置导入、导出与重置
  • 视觉检测技术讲解
  • LibreCAD-2.2+QT5.12+RTKLIB2.4.3
  • Pydantic Schemas 及其在 FastAPI 中的作用
  • SMS05 TVS二极管阵列的ESD和闭锁保护SOT23-6封装
  • Stream的常用API应用场景
  • 【DMA】DMA实战:用DMA操控外设
  • 深入理解传输层协议:UDP 与 TCP 的核心原理与应用
  • 教育行业数字化资料管理:构建安全合规、高效协同的一体化知识共享平台
  • Smart Launcher安卓版(安卓桌面启动器):安卓设备的智能启动器
  • Ansible如何写Callback 插件
  • 自动化测试框架需要具备哪些功能?
  • Pix2Pix中的对抗损失与L1损失:高频细节与低频结构的平衡艺术
  • mkcert生成证书本地或内网使用https
  • 【Python】关于移除Conda中已搭建环境的相关问题
  • 基于SpringBoot+Vue的校园兼职管理系统(WebSocket及时通讯、地图API、Echarts图形化分析)