目录
[QPlainTextEdit 类概述](#QPlainTextEdit 类概述)
[QTextBrowser 类概述](#QTextBrowser 类概述)
写在前面:这些类更多你的使用方法是:我需要XX功能,看看XX控件提不提供,然后来这里查。
目录可以帮助你快速跳转,资料来源于Qt Document使用GPT快速整理,笔者粗略校对
如果需要新添加控件可以评论区call我,看到第一时间补
QComboBox
QComboBox
是一种紧凑的方式来向用户呈现选项列表。组合框是一个选择控件,显示当前项,并在点击时弹出一个可选择的项列表。如果重载了 insertItem()
和 setItemText()
函数,组合框还可以包含图像(pixmaps)以及字符串。
组合框可以是可编辑的,允许用户修改列表中的每个项。对于可编辑的组合框,提供了 clearEditText()
函数,用于在不更改组合框内容的情况下清除显示的字符串。当用户在可编辑的组合框中输入新字符串时,控件可以选择插入该字符串,并且可以在多个位置插入。默认策略为 InsertAtBottom
,但您可以使用 setInsertPolicy()
进行更改。
可以使用 QValidator
来约束可编辑组合框的输入;具体请参见 setValidator()
。默认情况下,任何输入都是被接受的。组合框可以使用插入函数填充,例如 insertItem()
和 insertItems()
。可以使用 setItemText()
更改项。可以使用 removeItem()
移除单个项,并使用 clear()
移除所有项。当前项的文本通过 currentText()
返回,某个编号项的文本通过 itemText()
返回。可以使用 setCurrentIndex()
设置当前项。组合框中的项数通过 count()
返回;最大项数可以通过 setMaxCount()
设置。可以使用 setEditable()
允许编辑。对于可编辑的组合框,可以使用 setCompleter()
设置自动完成,并通过 setDuplicatesEnabled()
控制用户是否可以添加重复项。
类别 | 函数/信号/插槽 | 说明 |
---|---|---|
公共函数 | QComboBox(QWidget *parent = nullptr) |
构造函数,创建一个组合框,可以指定父窗口。 |
virtual ~QComboBox() |
析构函数,释放组合框资源。 | |
void addItem(const QString &text, const QVariant &userData = QVariant()) |
添加文本项,允许附加用户数据。 | |
void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant()) |
添加带图标的项。 | |
void addItems(const QStringList &texts) |
添加多个文本项。 | |
QCompleter *completer() const |
获取与组合框关联的补全器。 | |
int count() const |
返回组合框中的项数。 | |
QVariant currentData(int role = Qt::UserRole) const |
获取当前选中项的数据。 | |
int currentIndex() const |
返回当前选中项的索引。 | |
QString currentText() const |
返回当前选中项的文本。 | |
bool duplicatesEnabled() const |
检查是否允许重复项。 | |
`int findData(const QVariant &data, int role = Qt::UserRole, Qt::MatchFlags flags = static_castQt::MatchFlags(Qt::MatchExactly | Qt::MatchCaseSensitive)) const` | |
`int findText(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly | Qt::MatchCaseSensitive) const` | |
bool hasFrame() const |
检查组合框是否有边框。 | |
virtual void hidePopup() |
隐藏下拉列表。 | |
QSize iconSize() const |
获取图标的大小。 | |
void insertItem(int index, const QString &text, const QVariant &userData = QVariant()) |
在指定索引位置插入文本项。 | |
void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant()) |
在指定索引位置插入带图标的项。 | |
void insertItems(int index, const QStringList &list) |
在指定索引位置插入多个项。 | |
QComboBox::InsertPolicy insertPolicy() const |
获取插入策略。 | |
void insertSeparator(int index) |
在指定索引位置插入分隔符。 | |
bool isEditable() const |
检查组合框是否可编辑。 | |
QVariant itemData(int index, int role = Qt::UserRole) const |
获取指定索引项的用户数据。 | |
QAbstractItemDelegate *itemDelegate() const |
获取项委托。 | |
QIcon itemIcon(int index) const |
获取指定索引项的图标。 | |
QString itemText(int index) const |
获取指定索引项的文本。 | |
QLineEdit *lineEdit() const |
获取与组合框关联的编辑框。 | |
int maxCount() const |
获取组合框的最大项数。 | |
int maxVisibleItems() const |
获取组合框可见项的最大数。 | |
int minimumContentsLength() const |
获取组合框内容的最小长度。 | |
QAbstractItemModel *model() const |
获取与组合框关联的数据模型。 | |
int modelColumn() const |
获取模型中可见列的索引。 | |
QString placeholderText() const |
获取占位符文本。 | |
void removeItem(int index) |
移除指定索引的项。 | |
QModelIndex rootModelIndex() const |
获取根模型索引。 | |
void setCompleter(QCompleter *completer) |
设置与组合框关联的补全器。 | |
void setDuplicatesEnabled(bool enable) |
启用或禁用重复项。 | |
void setEditable(bool editable) |
设置组合框是否可编辑。 | |
void setFrame(bool) |
设置组合框的边框可见性。 | |
void setIconSize(const QSize &size) |
设置图标的大小。 | |
void setInsertPolicy(QComboBox::InsertPolicy policy) |
设置插入策略。 | |
void setItemData(int index, const QVariant &value, int role = Qt::UserRole) |
设置指定索引项的用户数据。 | |
void setItemDelegate(QAbstractItemDelegate *delegate) |
设置项委托。 | |
void setItemIcon(int index, const QIcon &icon) |
设置指定索引项的图标。 | |
void setItemText(int index, const QString &text) |
设置指定索引项的文本。 | |
void setLineEdit(QLineEdit *edit) |
设置与组合框关联的编辑框。 | |
void setMaxCount(int max) |
设置组合框的最大项数。 | |
void setMaxVisibleItems(int maxItems) |
设置组合框可见项的最大数。 | |
void setMinimumContentsLength(int characters) |
设置组合框内容的最小长度。 | |
virtual void setModel(QAbstractItemModel *model) |
设置与组合框关联的数据模型。 | |
void setModelColumn(int visibleColumn) |
设置可见列的索引。 | |
void setPlaceholderText(const QString &placeholderText) |
设置占位符文本。 | |
void setRootModelIndex(const QModelIndex &index) |
设置根模型索引。 | |
void setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy) |
设置大小调整策略。 | |
void setValidator(const QValidator *validator) |
设置输入验证器。 | |
void setView(QAbstractItemView *itemView) |
设置组合框的视图。 | |
virtual void showPopup() |
显示下拉列表。 | |
QComboBox::SizeAdjustPolicy sizeAdjustPolicy() const |
获取大小调整策略。 | |
const QValidator *validator() const |
获取输入验证器。 | |
QAbstractItemView *view() const |
获取组合框的视图。 | |
重写公共函数 | virtual bool event(QEvent *event) override |
处理事件。 |
virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const override |
查询输入法信息。 | |
virtual QSize minimumSizeHint() const override |
获取组合框的最小尺寸提示。 | |
virtual QSize sizeHint() const override |
获取组合框的尺寸提示。 | |
公共插槽 | void clear() |
清空组合框中的所有项。 |
void clearEditText() |
清空编辑框的文本。 | |
void setCurrentIndex(int index) |
设置当前选中项的索引。 | |
void setCurrentText(const QString &text) |
设置当前选中项的文本。 | |
void setEditText(const QString &text) |
设置编辑框的文本。 | |
信号 | void activated(int index) |
当选择项被激活时发射信号,返回选中项的索引。 |
void currentIndexChanged(int index) |
当当前索引发生变化时发射信号。 | |
void currentTextChanged(const QString &text) |
当当前文本发生变化时发射信号。 | |
void editTextChanged(const QString &text) |
当编辑框的文本发生变化时发射信号。 | |
void highlighted(int index) |
当高亮项发生变化时发射信号,返回高亮项的索引。 | |
void textActivated(const QString &text) |
当文本项被激活时发射信号,返回激活的文本。 | |
void textHighlighted(const QString &text) |
当高亮文本发生变化时发射信号,返回高亮的文本。 | |
保护函数 | virtual void initStyleOption(QStyleOptionComboBox *option) const |
初始化样式选项。 |
重写保护函数 | virtual void changeEvent(QEvent *e) override |
处理改变事件。 |
virtual void contextMenuEvent(QContextMenuEvent *e) override |
处理上下文菜单事件。 | |
virtual void focusInEvent(QFocusEvent *e) override |
处理获取焦点事件。 | |
virtual void focusOutEvent(QFocusEvent *e) override |
处理失去焦点事件。 | |
virtual void hideEvent(QHideEvent *e) override |
处理隐藏事件。 | |
virtual void inputMethodEvent(QInputMethodEvent *e) override |
处理输入法事件。 | |
virtual void keyPressEvent(QKeyEvent *e) override |
处理按键按下事件。 | |
virtual void keyReleaseEvent(QKeyEvent *e) override |
处理按键释放事件。 | |
virtual void mousePressEvent(QMouseEvent *e) override |
处理鼠标按下事件。 | |
virtual void mouseReleaseEvent(QMouseEvent *e) override |
处理鼠标释放事件。 | |
virtual void paintEvent(QPaintEvent *e) override |
处理绘制事件。 | |
virtual void resizeEvent(QResizeEvent *e) override |
处理调整大小事件。 | |
virtual void showEvent(QShowEvent *e) override |
处理显示事件。 | |
virtual void wheelEvent(QWheelEvent *e) override |
处理滚轮事件。 |
QToolBar
工具栏通常通过调用 QMainWindow::addToolBar(const QString &title)
创建,但也可以作为 QVBoxLayout
中的第一个小部件添加。工具栏按钮通过添加动作来添加,使用 addAction()
或 insertAction()
。按钮组可以通过 addSeparator()
或 insertSeparator()
来分隔。如果某个工具栏按钮不合适,可以使用 addWidget()
或 insertWidget()
插入一个小部件。适合的小部件的例子包括 QSpinBox
、QDoubleSpinBox
和 QComboBox
。当工具栏按钮被按下时,会发出 actionTriggered()
信号。
工具栏可以固定在特定区域(例如窗口顶部),也可以在工具栏区域之间移动;参见 setMovable()
、isMovable()
、allowedAreas()
和 isAreaAllowed()
。当工具栏以某种方式被调整大小,以至于太小而无法显示其包含的所有项时,扩展按钮将作为工具栏中的最后一项出现。按下扩展按钮将弹出一个菜单,包含当前无法适应工具栏的项。当 QToolBar
不是 QMainWindow
的子对象时,它失去了使用 addWidget()
向工具栏添加小部件来填充扩展弹出窗口的能力。请使用通过继承 QWidgetAction
并实现 QWidgetAction::createWidget()
创建的控件动作。
API
公共函数 | 描述 |
---|---|
QToolBar(QWidget *parent = nullptr) | 构造函数,创建工具栏,指定父组件。 |
QToolBar(const QString &title, QWidget *parent = nullptr) | 构造函数,创建带标题的工具栏,指定父组件。 |
virtual ~QToolBar() | 析构函数,销毁工具栏。 |
QAction *actionAt(const QPoint &p) const | 返回指定位置的动作(按钮)。 |
QAction *actionAt(int x, int y) const | 返回指定坐标的动作(按钮)。 |
QAction *addSeparator() | 添加分隔符,返回创建的 QAction。 |
QAction *addWidget(QWidget *widget) | 添加一个小部件到工具栏,返回创建的 QAction。 |
Qt::ToolBarAreas allowedAreas() const | 返回允许的区域。 |
void clear() | 清除工具栏中的所有动作。 |
QSize iconSize() const | 返回图标的大小。 |
QAction *insertSeparator(QAction *before) | 在指定动作之前插入一个分隔符。 |
QAction *insertWidget(QAction *before, QWidget *widget) | 在指定动作之前插入一个小部件。 |
bool isAreaAllowed(Qt::ToolBarArea area) const | 检查指定区域是否被允许。 |
bool isFloatable() const | 检查工具栏是否可以浮动。 |
bool isFloating() const | 检查工具栏是否处于浮动状态。 |
bool isMovable() const | 检查工具栏是否可以移动。 |
Qt::Orientation orientation() const | 返回工具栏的方向(水平或垂直)。 |
void setAllowedAreas(Qt::ToolBarAreas areas) | 设置允许的区域。 |
void setFloatable(bool floatable) | 设置工具栏是否可以浮动。 |
void setMovable(bool movable) | 设置工具栏是否可以移动。 |
void setOrientation(Qt::Orientation orientation) | 设置工具栏的方向。 |
QAction *toggleViewAction() const | 返回切换视图的 QAction。 |
Qt::ToolButtonStyle toolButtonStyle() const | 返回工具按钮的样式。 |
QWidget *widgetForAction(QAction *action) const | 返回与指定动作关联的小部件。 |
公共槽 | 描述 |
---|---|
void setIconSize(const QSize &iconSize) | 设置图标的大小。 |
void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle) | 设置工具按钮的样式。 |
信号 | 描述 |
---|---|
void actionTriggered(QAction *action) | 当某个动作被触发时发出信号。 |
void allowedAreasChanged(Qt::ToolBarAreas allowedAreas) | 允许的区域发生改变时发出信号。 |
void iconSizeChanged(const QSize &iconSize) | 图标大小发生改变时发出信号。 |
void movableChanged(bool movable) | 可移动状态发生改变时发出信号。 |
void orientationChanged(Qt::Orientation orientation) | 方向发生改变时发出信号。 |
void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle) | 工具按钮样式发生改变时发出信号。 |
void topLevelChanged(bool topLevel) | 顶层状态发生改变时发出信号。 |
void visibilityChanged(bool visible) | 可见状态发生改变时发出信号。 |
QStatusBar
每个状态指示符属于以下三种类别之一:
-
临时 - 短暂占用状态栏的大部分空间。例如,用于解释工具提示文本或菜单项。
-
正常 - 占用状态栏的一部分,可能会被临时消息隐藏。例如,用于在文字处理器中显示页码和行号。
-
永久 - 永远不会被隐藏。例如,用于重要的模式指示,一些应用程序在状态栏中放置大写锁定指示符。
QStatusBar
允许您显示这三种类型的指示符。通常,状态栏功能的请求与 QMainWindow
对象相关。QMainWindow
提供一个主应用程序窗口,包含菜单栏、工具栏、停靠窗口和围绕大中央部件的状态栏。可以使用 QMainWindow::statusBar()
函数获取状态栏,使用 QMainWindow::setStatusBar()
函数替换状态栏。
使用 showMessage()
槽来显示临时消息:
statusBar()->showMessage(tr("Ready"));
要移除临时消息,可以使用 clearMessage()
槽,或者在调用 showMessage()
时设置时间限制。例如:
statusBar()->showMessage(tr("Ready"), 2000);
使用 currentMessage()
函数检索当前显示的临时消息。QStatusBar
类还提供了 messageChanged()
信号,该信号在临时状态消息更改时发出。正常和永久消息通过创建小部件(如 QLabel
、QProgressBar
或 QToolButton
),然后使用 addWidget()
或 addPermanentWidget()
函数将其添加到状态栏来显示。使用 removeWidget()
函数从状态栏中移除这些消息。
statusBar()->addWidget(new MyReadWriteIndication);
默认情况下,QStatusBar
在右下角提供一个调整大小手柄。您可以使用 setSizeGripEnabled()
函数禁用它。使用 isSizeGripEnabled()
函数确定调整大小手柄的当前状态。
API
公共函数 | 描述 |
---|---|
QStatusBar(QWidget *parent = nullptr) |
构造函数,创建一个状态栏。 |
virtual ~QStatusBar() |
析构函数,销毁状态栏。 |
void addPermanentWidget(QWidget *widget, int stretch = 0) |
添加一个永久性小部件到状态栏。 |
void addWidget(QWidget *widget, int stretch = 0) |
添加一个小部件到状态栏。 |
QString currentMessage() const |
返回当前显示的临时消息。 |
int insertPermanentWidget(int index, QWidget *widget, int stretch = 0) |
在指定位置插入一个永久性小部件到状态栏。 |
int insertWidget(int index, QWidget *widget, int stretch = 0) |
在指定位置插入一个小部件到状态栏。 |
bool isSizeGripEnabled() const |
判断是否启用调整大小手柄。 |
void removeWidget(QWidget *widget) |
从状态栏移除指定的小部件。 |
void setSizeGripEnabled(bool) |
设置是否启用调整大小手柄。 |
公共槽 | 描述 |
---|---|
void clearMessage() |
清除当前显示的临时消息。 |
void showMessage(const QString &message, int timeout = 0) |
显示临时消息,超时后自动清除。 |
信号 | 描述 |
---|---|
void messageChanged(const QString &message) |
当临时状态消息变化时发出信号。 |
受保护函数 | 描述 |
---|---|
void hideOrShow() |
隐藏或显示状态栏的辅助函数。 |
void reformat() |
重新格式化状态栏的辅助函数。 |
重写的受保护函数 | 描述 |
---|---|
virtual bool event(QEvent *e) override |
处理事件的重写函数。 |
virtual void paintEvent(QPaintEvent *event) override |
处理绘制事件的重写函数。 |
virtual void resizeEvent(QResizeEvent *e) override |
处理调整大小事件的重写函数。 |
virtual void showEvent(QShowEvent *) override |
处理显示事件的重写函数。 |
QPlainTextEdit
QPlainTextEdit 类概述
QPlainTextEdit
是一个高级的纯文本查看器/编辑器,优化用于处理大文档并快速响应用户输入。它使用与 QTextEdit
类似的技术和概念,但专注于纯文本处理。
-
QPlainTextEdit
基于段落和字符进行工作。段落是格式化字符串,自动换行以适应小部件的宽度。默认情况下,读取纯文本时,一个换行符表示一个段落。文档由零个或多个段落组成,段落之间通过硬换行符分隔。段落内的每个字符都有自己的属性,例如字体和颜色。 -
默认情况下,
QPlainTextEdit
中鼠标光标为Qt::IBeamCursor
,可以通过视口的光标属性进行更改。 -
使用
setPlainText()
设置或替换文本,该方法会删除现有文本并用传入的文本替换。 -
可以使用
QTextCursor
类插入文本,或使用便利函数insertPlainText()
、appendPlainText()
或paste()
。 -
默认情况下,文本编辑器会在空白处换行以适应小部件的宽度。使用
setLineWrapMode()
函数可指定换行方式,WidgetWidth
表示在小部件宽度内换行,NoWrap
表示不换行。如果使用WidgetWidth
换行,可以通过setWordWrapMode()
指定是在哪些地方断行。 -
使用
find()
函数可以查找并选择文本中的指定字符串。 -
若要限制
QPlainTextEdit
中段落的总数(例如用于日志查看器),可以使用maximumBlockCount
属性。结合setMaximumBlockCount()
和appendPlainText()
,QPlainTextEdit
可以有效地用作日志文本查看器。通过设置centerOnScroll()
属性,可以进一步提高日志查看器的性能。文本可以以有限的方式格式化,或通过使用语法高亮器,或通过appendHtml()
追加 HTML 格式的文本。虽然QPlainTextEdit
不支持复杂的富文本渲染(如表格和浮动),但它支持基本的段落格式化。
在只读模式下,QPlainTextEdit
的键绑定限制为导航,仅可通过鼠标选择文本:
按键 | 动作 |
---|---|
Qt::UpArrow | 上移一行 |
Qt::DownArrow | 下移一行 |
Qt::LeftArrow | 左移一个字符 |
Qt::RightArrow | 右移一个字符 |
PageUp | 上移一页 |
PageDown | 下移一页 |
Home | 移动到文本开始 |
End | 移动到文本结束 |
Alt+Wheel | 横向滚动页面 |
Ctrl+Wheel | 缩放文本 |
Ctrl+A | 选择所有文本 |
-
在编辑模式下,文本选择由
QTextCursor
类处理,该类提供创建选择、检索文本内容或删除选择的功能。可以使用textCursor()
方法获取与用户可见光标对应的对象。如果要在QPlainTextEdit
中设置选择,只需在QTextCursor
对象上创建选择,然后使用setCursor()
将该光标设置为可见光标。可以使用copy()
将选择复制到剪贴板,或使用cut()
剪切到剪贴板。可以使用selectAll()
选择全部文本。 -
QPlainTextEdit
持有一个QTextDocument
对象,可以通过document()
方法获取。可以使用setDocument()
设置自己的文档对象。QTextDocument
在文本更改时会发出textChanged()
信号,并提供isModified()
方法,如果文本自加载或上次调用setModified(false)
以来已被修改,则返回true
。此外,它还提供撤销和重做的方法。
对于高亮:QPlainTextEdit
与 QSyntaxHighlighter
配合使用。
按键 | 动作 |
---|---|
Backspace | 删除光标左侧的字符 |
Delete | 删除光标右侧的字符 |
Ctrl+C | 将选中的文本复制到剪贴板 |
Ctrl+Insert | 将选中的文本复制到剪贴板 |
Ctrl+K | 删除光标到行末的内容 |
Ctrl+V | 将剪贴板文本粘贴到文本编辑器 |
Shift+Insert | 将剪贴板文本粘贴到文本编辑器 |
Ctrl+X | 删除选中文本并复制到剪贴板 |
Shift+Delete | 删除选中文本并复制到剪贴板 |
Ctrl+Z | 撤销上一个操作 |
Ctrl+Y | 重做上一个操作 |
LeftArrow | 光标左移一个字符 |
Ctrl+LeftArrow | 光标左移一个单词 |
RightArrow | 光标右移一个字符 |
Ctrl+RightArrow | 光标右移一个单词 |
UpArrow | 光标上移一行 |
Ctrl+UpArrow | 光标上移一个单词 |
DownArrow | 光标下移一行 |
Ctrl+DownArrow | 光标下移一个单词 |
PageUp | 光标上移一页 |
PageDown | 光标下移一页 |
Home | 光标移到行首 |
Ctrl+Home | 光标移到文本开始 |
End | 光标移到行末 |
Ctrl+End | 光标移到文本结束 |
Alt+Wheel | 横向滚动页面 |
Ctrl+Wheel | 缩放文本 |
要选择(标记)文本,可以在按住 Shift 键的同时按下某个移动键,例如,按 Shift+Right Arrow 将选择光标右侧的字符,按 Shift+Ctrl+Right Arrow 将选择光标右侧的单词等。
QPlainTextEdit
是一个轻量级类,使用了大部分支撑 QTextEdit
和 QTextDocument
的技术。它相较于 QTextEdit
的性能优势主要来自使用一种不同且简化的文本布局,即 QPlainTextDocumentLayout
。该布局不支持表格或嵌入框架,并用逐行或逐段落的滚动方式替代了像素精确的高度计算。这使得它能够处理显著更大的文档,同时在启用换行的情况下实时调整编辑器大小。此外,它还使得日志查看器的性能得到了提升(见 setMaximumBlockCount()
)。
API
成员 | 描述 |
---|---|
构造函数 | |
QPlainTextEdit(QWidget *parent = nullptr) |
创建一个空的文本编辑器。 |
QPlainTextEdit(const QString &text, QWidget *parent = nullptr) |
创建一个带有初始文本的文本编辑器。 |
析构函数 | virtual ~QPlainTextEdit() |
成员函数 | |
QString anchorAt(const QPoint &pos) const |
返回指定位置的锚点。 |
bool backgroundVisible() const |
返回背景是否可见。 |
int blockCount() const |
返回文本块的数量。 |
bool canPaste() const |
检查是否可以粘贴内容。 |
bool centerOnScroll() const |
返回是否在滚动时中心化光标。 |
QMenu *createStandardContextMenu() |
创建标准上下文菜单。 |
QMenu *createStandardContextMenu(const QPoint &position) |
在指定位置创建标准上下文菜单。 |
QTextCharFormat currentCharFormat() const |
返回当前字符格式。 |
QTextCursor cursorForPosition(const QPoint &pos) const |
返回指定位置的光标。 |
QRect cursorRect() const |
返回光标的矩形区域。 |
QRect cursorRect(const QTextCursor &cursor) const |
返回指定光标的矩形区域。 |
int cursorWidth() const |
返回光标的宽度。 |
QTextDocument *document() const |
返回关联的文本文档。 |
QString documentTitle() const |
返回文档标题。 |
void ensureCursorVisible() |
确保光标可见。 |
QList<QTextEdit::ExtraSelection> extraSelections() const |
返回额外选中的内容。 |
bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()) |
查找指定文本。 |
bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags()) |
使用正则表达式查找文本。 |
bool isReadOnly() const |
检查是否为只读模式。 |
bool isUndoRedoEnabled() const |
检查撤销/重做功能是否启用。 |
QPlainTextEdit::LineWrapMode lineWrapMode() const |
返回行换行模式。 |
virtual QVariant loadResource(int type, const QUrl &name) |
加载指定类型的资源。 |
int maximumBlockCount() const |
返回最大文本块数。 |
void mergeCurrentCharFormat(const QTextCharFormat &modifier) |
合并当前字符格式。 |
void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor) |
移动光标。 |
bool overwriteMode() const |
返回是否为覆盖模式。 |
QString placeholderText() const |
返回占位符文本。 |
void print(QPagedPaintDevice *printer) const |
打印文本。 |
void setBackgroundVisible(bool visible) |
设置背景可见性。 |
void setCenterOnScroll(bool enabled) |
设置滚动时中心化光标。 |
void setCurrentCharFormat(const QTextCharFormat &format) |
设置当前字符格式。 |
void setCursorWidth(int width) |
设置光标宽度。 |
void setDocument(QTextDocument *document) |
设置关联的文本文档。 |
void setDocumentTitle(const QString &title) |
设置文档标题。 |
void setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections) |
设置额外选中的内容。 |
void setLineWrapMode(QPlainTextEdit::LineWrapMode mode) |
设置行换行模式。 |
void setMaximumBlockCount(int maximum) |
设置最大文本块数。 |
void setOverwriteMode(bool overwrite) |
设置覆盖模式。 |
void setPlaceholderText(const QString &placeholderText) |
设置占位符文本。 |
void setReadOnly(bool ro) |
设置为只读模式。 |
void setTabChangesFocus(bool b) |
设置 Tab 键是否改变焦点。 |
void setTabStopDistance(qreal distance) |
设置 Tab 停止距离。 |
void setTextCursor(const QTextCursor &cursor) |
设置文本光标。 |
void setTextInteractionFlags(Qt::TextInteractionFlags flags) |
设置文本交互标志。 |
void setUndoRedoEnabled(bool enable) |
设置撤销/重做功能。 |
void setWordWrapMode(QTextOption::WrapMode policy) |
设置单词换行模式。 |
bool tabChangesFocus() const |
返回 Tab 键是否改变焦点的状态。 |
qreal tabStopDistance() const |
返回 Tab 停止距离。 |
QTextCursor textCursor() const |
返回当前文本光标。 |
Qt::TextInteractionFlags textInteractionFlags() const |
返回文本交互标志。 |
QString toPlainText() const |
返回纯文本内容。 |
QTextOption::WrapMode wordWrapMode() const |
返回单词换行模式。 |
重载函数 | |
virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const override |
输入法查询。 |
公共槽 | |
void appendHtml(const QString &html) |
添加 HTML 内容。 |
void appendPlainText(const QString &text) |
添加纯文本。 |
void centerCursor() |
将光标居中。 |
void clear() |
清除文本。 |
void copy() |
复制选中的文本。 |
void cut() |
剪切选中的文本。 |
void insertPlainText(const QString &text) |
插入纯文本。 |
void paste() |
粘贴内容。 |
void redo() |
重做操作。 |
void selectAll() |
选择所有文本。 |
void setPlainText(const QString &text) |
设置纯文本内容。 |
void undo() |
撤销操作。 |
void zoomIn(int range = 1) |
放大文本。 |
void zoomOut(int range = 1) |
缩小文本。 |
信号 | |
void blockCountChanged(int newBlockCount) |
文本块数变化时发出信号。 |
void copyAvailable(bool yes) |
复制可用状态变化时发出信号。 |
void cursorPositionChanged() |
光标位置变化时发出信号。 |
void modificationChanged(bool changed) |
文本修改状态变化时发出信号。 |
void redoAvailable(bool available) |
重做可用状态变化时发出信号。 |
void selectionChanged() |
选择变化时发出信号。 |
void textChanged() |
文本内容变化时发出信号。 |
void undoAvailable(bool available) |
撤销可用状态变化时发出信号。 |
void updateRequest(const QRect &rect, int dy) |
更新请求时发出信号。 |
保护函数 | |
QRectF blockBoundingGeometry(const QTextBlock &block) const |
返回指定文本块的边界矩形。 |
QRectF blockBoundingRect(const QTextBlock &block) const |
返回指定文本块的边界矩形。 |
virtual bool canInsertFromMimeData(const QMimeData *source) const |
检查是否可以从 MIME 数据插入。 |
QPointF contentOffset() const |
返回内容偏移量。 |
virtual QMimeData *createMimeDataFromSelection() const |
从选中内容创建 MIME 数据。 |
QTextBlock firstVisibleBlock() const |
返回第一个可见的文本块。 |
QAbstractTextDocumentLayout::PaintContext getPaintContext() const |
获取绘制上下文。 |
virtual void insertFromMimeData(const QMimeData *source) |
从 MIME 数据插入内容。 |
重载保护函数 | |
virtual void changeEvent(QEvent *e) override |
事件变化时的处理。 |
virtual void contextMenuEvent(QContextMenuEvent *event) override |
上下文菜单事件处理。 |
virtual void dragEnterEvent(QDragEnterEvent *e) override |
拖放进入事件处理。 |
virtual void dragLeaveEvent(QDragLeaveEvent *e) override |
拖放离开事件处理。 |
virtual void dragMoveEvent(QDragMoveEvent *e) override |
拖放移动事件处理。 |
virtual void dropEvent(QDropEvent *e) override |
放下事件处理。 |
virtual void focusInEvent(QFocusEvent *e) override |
焦点进入事件处理。 |
virtual bool focusNextPrevChild(bool next) override |
焦点切换事件处理。 |
virtual void focusOutEvent(QFocusEvent *e) override |
焦点离开事件处理。 |
virtual void inputMethodEvent(QInputMethodEvent *e) override |
输入法事件处理。 |
virtual void keyPressEvent(QKeyEvent *e) override |
按键按下事件处理。 |
virtual void keyReleaseEvent(QKeyEvent *e) override |
按键释放事件处理。 |
virtual void mouseDoubleClickEvent(QMouseEvent *e) override |
鼠标双击事件处理。 |
virtual void mouseMoveEvent(QMouseEvent *e) override |
鼠标移动事件处理。 |
virtual void mousePressEvent(QMouseEvent *e) override |
鼠标按下事件处理。 |
virtual void mouseReleaseEvent(QMouseEvent *e) override |
鼠标释放事件处理。 |
virtual void paintEvent(QPaintEvent *e) override |
绘制事件处理。 |
virtual void resizeEvent(QResizeEvent *e) override |
窗口大小变化事件处理。 |
virtual void scrollContentsBy(int dx, int dy) override |
内容滚动事件处理。 |
virtual void showEvent(QShowEvent *) override |
显示事件处理。 |
virtual void wheelEvent(QWheelEvent *e) override |
滚轮事件处理。 |
QTextEdit
QTextEdit
是一个高级 WYSIWYG (所见即所得)文本编辑器,支持富文本格式,可以使用 HTML 风格的标签或 Markdown 格式进行文本编辑。它被优化为处理大文档并快速响应用户输入。
-
段落和字符 :
QTextEdit
处理段落和字符。段落是格式化字符串,根据小部件的宽度进行换行。默认情况下,纯文本中的换行符表示一个段落。文档由零个或多个段落组成,段落通过硬换行分隔。每个字符可以有自己的属性,例如字体和颜色。 -
支持的内容 :
QTextEdit
可以显示图像、列表和表格,支持加载纯文本和富文本文件。
方法/信号 | 描述 |
---|---|
构造函数 | |
QTextEdit(QWidget *parent = nullptr) |
创建一个文本编辑器,指定父级小部件。 |
QTextEdit(const QString &text, QWidget *parent = nullptr) |
使用指定文本创建一个文本编辑器。 |
virtual ~QTextEdit() |
析构函数。 |
文本与格式 | |
void setHtml(const QString &text) |
设置编辑器内容为 HTML 格式,替换现有文本。 |
void setPlainText(const QString &text) |
设置编辑器内容为纯文本格式。 |
QString toHtml() const |
返回编辑器内容的 HTML 表示。 |
QString toPlainText() const |
返回编辑器内容的纯文本表示。 |
void setMarkdown(const QString &markdown) |
设置编辑器内容为 Markdown 格式。 |
光标与选择 | |
QTextCursor textCursor() const |
获取当前的文本光标对象。 |
void setTextCursor(const QTextCursor &cursor) |
设置文本光标为指定的光标对象。 |
void selectAll() |
选择所有文本。 |
复制、剪切与粘贴 | |
bool canPaste() const |
检查是否可以粘贴文本。 |
void copy() |
复制选中文本到剪贴板。 |
void cut() |
剪切选中文本到剪贴板。 |
void paste() |
从剪贴板粘贴文本。 |
撤销与重做 | |
void undo() |
撤销上一个操作。 |
void redo() |
重做上一个操作。 |
信号 | |
void textChanged() |
文本内容改变时发出信号。 |
void currentCharFormatChanged(const QTextCharFormat &f) |
当前字符格式发生变化时发出信号。 |
拖放功能 | |
bool canInsertFromMimeData(const QMimeData *source) const |
检查是否可以从 MIME 数据插入内容。 |
void insertFromMimeData(const QMimeData *source) |
从 MIME 数据插入内容。 |
编辑键绑定 | |
Keypresses | Action |
Backspace | 删除光标左侧的字符。 |
Delete | 删除光标右侧的字符。 |
Ctrl+C | 复制选中文本到剪贴板。 |
Ctrl+V | 粘贴剪贴板文本到编辑器。 |
Ctrl+X | 删除选中文本并复制到剪贴板。 |
Ctrl+Z | 撤销上一个操作。 |
Ctrl+Y | 重做上一个操作。 |
API
方法/信号 | 描述 |
---|---|
构造函数 | |
QTextEdit(QWidget *parent = nullptr) |
创建一个文本编辑器,指定父级小部件。 |
QTextEdit(const QString &text, QWidget *parent = nullptr) |
使用指定文本创建一个文本编辑器。 |
virtual ~QTextEdit() |
析构函数。 |
文本与格式 | |
bool acceptRichText() const |
返回是否接受富文本格式。 |
Qt::Alignment alignment() const |
获取当前文本的对齐方式。 |
QString anchorAt(const QPoint &pos) const |
返回指定位置的锚点。 |
QTextEdit::AutoFormatting autoFormatting() const |
获取自动格式化选项。 |
void setHtml(const QString &text) |
设置编辑器内容为 HTML 格式。 |
void setPlainText(const QString &text) |
设置编辑器内容为纯文本格式。 |
QString toHtml() const |
返回编辑器内容的 HTML 表示。 |
QString toPlainText() const |
返回编辑器内容的纯文本表示。 |
光标与选择 | |
QTextCursor cursorForPosition(const QPoint &pos) const |
返回指定位置的光标。 |
QRect cursorRect() const |
返回光标的矩形区域。 |
QTextCursor textCursor() const |
获取当前的文本光标对象。 |
void ensureCursorVisible() |
确保光标在视口内可见。 |
复制、剪切与粘贴 | |
bool canPaste() const |
检查是否可以粘贴文本。 |
void copy() |
复制选中文本到剪贴板。 |
void cut() |
剪切选中文本到剪贴板。 |
void paste() |
从剪贴板粘贴文本。 |
void selectAll() |
选择所有文本。 |
撤销与重做 | |
bool isUndoRedoEnabled() const |
检查撤销/重做功能是否启用。 |
void undo() |
撤销上一个操作。 |
void redo() |
重做上一个操作。 |
信号 | |
void copyAvailable(bool yes) |
当复制功能可用时发出信号。 |
void currentCharFormatChanged(const QTextCharFormat &f) |
当前字符格式发生变化时发出信号。 |
void cursorPositionChanged() |
光标位置改变时发出信号。 |
void textChanged() |
文本内容改变时发出信号。 |
保护函数 | |
virtual bool canInsertFromMimeData(const QMimeData *source) const |
检查是否可以从 MIME 数据插入内容。 |
virtual void insertFromMimeData(const QMimeData *source) |
从 MIME 数据插入内容。 |
QTextBrowser
QTextBrowser
类概述
QTextBrowser
类扩展了 QTextEdit
(以只读模式),增加了一些导航功能,使用户能够在超文本文档中跟随链接。如果您希望提供用户可编辑的富文本编辑器,请使用 QTextEdit
;如果您想要一个没有超文本导航的文本浏览器,则使用 QTextEdit
并调用 QTextEdit::setReadOnly()
来禁用编辑。如果您只需要显示一小段富文本,请使用 QLabel
。文档内容通过 setHtml()
或 setPlainText()
方法设置,但 QTextBrowser
还实现了 setSource()
函数,可以将命名文档用作源文本。文档名称将在搜索路径列表和当前文档工厂的目录中查找。如果文档名称以锚点结尾(例如 #anchor
),文本浏览器会自动滚动到该位置(使用 scrollToAnchor()
)。当用户点击超链接时,浏览器会使用链接的 href 值自动调用 setSource()
。您可以通过连接到 sourceChanged()
信号来跟踪当前源。QTextBrowser
提供 backward()
和 forward()
槽,用于实现"后退"和"前进"按钮。home()
槽将文本设置为最初显示的文档。用户点击锚点时会发出 anchorClicked()
信号。要重写浏览器的默认导航行为,可以在连接到此信号的槽中调用 setSource()
函数,以提供新的文档文本。如果要加载存储在 Qt 资源系统中的文档,请在 URL 中使用 qrc
作为方案。例如,对于文档资源路径 :/docs/index.html
,使用 qrc:/docs/index.html
作为 URL 调用 setSource()
。
方法/信号 | 描述 |
---|---|
构造函数 | |
QTextBrowser(QWidget *parent = nullptr) |
创建一个文本浏览器,指定父级小部件。 |
历史记录管理 | |
int backwardHistoryCount() const |
返回可以向后导航的历史记录数量。 |
int forwardHistoryCount() const |
返回可以向前导航的历史记录数量。 |
void clearHistory() |
清空历史记录。 |
QString historyTitle(int i) const |
返回历史记录中第 i 个条目的标题。 |
QUrl historyUrl(int i) const |
返回历史记录中第 i 个条目的 URL。 |
bool isBackwardAvailable() const |
检查是否可以向后导航。 |
bool isForwardAvailable() const |
检查是否可以向前导航。 |
链接处理 | |
bool openExternalLinks() const |
检查是否打开外部链接。 |
bool openLinks() const |
检查是否打开链接。 |
void setOpenExternalLinks(bool open) |
设置是否打开外部链接。 |
void setOpenLinks(bool open) |
设置是否打开链接。 |
文档源管理 | |
void setSearchPaths(const QStringList &paths) |
设置搜索路径。 |
QUrl source() const |
返回当前文档的源 URL。 |
QTextDocument::ResourceType sourceType() const |
返回文档源的类型。 |
导航功能 | |
virtual void backward() |
向后导航到上一个文档。 |
virtual void forward() |
向前导航到下一个文档。 |
virtual void home() |
返回到第一个显示的文档。 |
virtual void reload() |
重新加载当前文档。 |
void setSource(const QUrl &url, QTextDocument::ResourceType type = QTextDocument::UnknownResource) |
设置文档的源。 |
信号 | |
void anchorClicked(const QUrl &link) |
当用户点击锚点时发出信号。 |
void backwardAvailable(bool available) |
向后导航可用性变化时发出信号。 |
void forwardAvailable(bool available) |
向前导航可用性变化时发出信号。 |
void highlighted(const QUrl &link) |
高亮显示链接时发出信号。 |
void historyChanged() |
历史记录变化时发出信号。 |
void sourceChanged(const QUrl &src) |
文档源变化时发出信号。 |
受保护函数 | |
virtual void doSetSource(const QUrl &url, QTextDocument::ResourceType type = QTextDocument::UnknownResource) |
设置文档源的内部实现。 |
重载函数 | |
virtual bool event(QEvent *e) override |
事件处理函数的重载。 |
virtual bool focusNextPrevChild(bool next) override |
处理子控件的焦点切换。 |
virtual void focusOutEvent(QFocusEvent *ev) override |
处理失去焦点事件。 |
virtual void keyPressEvent(QKeyEvent *ev) override |
处理按键事件。 |
virtual void mouseMoveEvent(QMouseEvent *e) override |
处理鼠标移动事件。 |
virtual void mousePressEvent(QMouseEvent *e) override |
处理鼠标按下事件。 |
virtual void mouseReleaseEvent(QMouseEvent *e) override |
处理鼠标释放事件。 |
virtual void paintEvent(QPaintEvent *e) override |
处理绘制事件。 |
QListWidget
QListWidget
是一个便利类,提供了类似于 QListView
的列表视图,但采用经典的基于项的接口来添加和移除项。QListWidget
使用内部模型来管理列表中的每个 QListWidgetItem
。列表控件的构造方式与其他控件相同:
QListWidget *listWidget = new QListWidget(this);
列表控件的选择模式决定了可以同时选择列表中的多少项,以及是否可以创建复杂的选择。这可以通过 setSelectionMode()
函数设置。有两种方法可以将项添加到列表中:它们可以在构造时指定列表控件作为父级控件,或者可以在没有父级控件的情况下构造并稍后添加到列表中。如果在构造项时已经存在列表控件,第一种方法更容易使用:
new QListWidgetItem(tr("Oak"), listWidget);
new QListWidgetItem(tr("Fir"), listWidget);
new QListWidgetItem(tr("Pine"), listWidget);
如果需要在特定位置插入新项,则应在没有父级控件的情况下构造该项。然后应使用 insertItem()
函数将其放置在列表中。列表控件将拥有该项。
QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(itemText);
listWidget->insertItem(row, newItem);
对于多个项,可以使用 insertItems()
。可以使用 count()
函数找到列表中的项数。要从列表中移除项,请使用 takeItem()
。可以使用 currentItem()
查找列表中的当前项,并通过 setCurrentItem()
更改当前项。用户还可以通过键盘导航或点击不同的项来更改当前项。当当前项变化时,会发出 currentItemChanged()
信号,带有新的当前项和之前的当前项
API
函数签名 | 用途说明 |
---|---|
QListWidget(QWidget *parent = nullptr) |
构造函数,创建一个 QListWidget ,可以指定父级窗口。 |
virtual ~QListWidget() |
析构函数,释放 QListWidget 使用的资源。 |
void addItem(QListWidgetItem *item) |
添加一个 QListWidgetItem 对象到列表中。 |
void addItem(const QString &label) |
使用字符串标签添加一个新项。 |
void addItems(const QStringList &labels) |
批量添加多个项,使用字符串列表。 |
void closePersistentEditor(QListWidgetItem *item) |
关闭指定项的持久编辑器。 |
int count() const |
返回列表中项的数量。 |
QListWidgetItem *currentItem() const |
获取当前选中的项。 |
int currentRow() const |
获取当前选中项的行号。 |
void editItem(QListWidgetItem *item) |
进入指定项的编辑模式。 |
QList<QListWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const |
根据文本查找项,返回匹配的项列表。 |
QModelIndex indexFromItem(const QListWidgetItem *item) const |
从项获取其对应的模型索引。 |
void insertItem(int row, QListWidgetItem *item) |
在指定行插入 QListWidgetItem 对象。 |
void insertItem(int row, const QString &label) |
在指定行插入一个新项,使用字符串标签。 |
void insertItems(int row, const QStringList &labels) |
在指定行批量插入多个项。 |
bool isPersistentEditorOpen(QListWidgetItem *item) const |
检查指定项的持久编辑器是否打开。 |
bool isSortingEnabled() const |
检查列表是否启用排序。 |
QListWidgetItem *item(int row) const |
获取指定行的项。 |
QListWidgetItem *itemAt(const QPoint &p) const |
根据点位置获取对应的项。 |
QListWidgetItem *itemAt(int x, int y) const |
根据坐标获取对应的项。 |
QListWidgetItem *itemFromIndex(const QModelIndex &index) const |
根据模型索引获取对应的项。 |
QWidget *itemWidget(QListWidgetItem *item) const |
获取指定项关联的自定义小部件。 |
QList<QListWidgetItem *> items(const QMimeData *data) const |
从 QMimeData 中提取项。 |
void openPersistentEditor(QListWidgetItem *item) |
打开指定项的持久编辑器。 |
void removeItemWidget(QListWidgetItem *item) |
移除指定项关联的自定义小部件。 |
int row(const QListWidgetItem *item) const |
获取指定项的行号。 |
QList<QListWidgetItem *> selectedItems() const |
获取当前选中的所有项。 |
void setCurrentItem(QListWidgetItem *item) |
设置当前选中的项。 |
void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command) |
设置当前选中项,带选择标志。 |
void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command) |
设置当前行,带选择标志。 |
void setCurrentRow(int row) |
设置当前行。 |
void setItemWidget(QListWidgetItem *item, QWidget *widget) |
为指定项设置一个自定义小部件。 |
void setSortingEnabled(bool enable) |
启用或禁用列表排序功能。 |
void sortItems(Qt::SortOrder order = Qt::AscendingOrder) |
根据指定顺序排序列表项。 |
QListWidgetItem *takeItem(int row) |
移除并返回指定行的项。 |
QRect visualItemRect(const QListWidgetItem *item) const |
获取指定项的可视矩形区域。 |
virtual void setSelectionModel(QItemSelectionModel *selectionModel) override |
设置选择模型。 |
void clear() |
清空列表中的所有项。 |
void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible) |
滚动到指定项。 |
信号签名 | 触发条件 |
---|---|
void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) |
当前项变化时触发。 |
void currentRowChanged(int currentRow) |
当前行变化时触发。 |
void currentTextChanged(const QString ¤tText) |
当前文本变化时触发。 |
void itemActivated(QListWidgetItem *item) |
项被激活时触发。 |
void itemChanged(QListWidgetItem *item) |
项状态变化时触发。 |
void itemClicked(QListWidgetItem *item) |
项被点击时触发。 |
void itemDoubleClicked(QListWidgetItem *item) |
项被双击时触发。 |
void itemEntered(QListWidgetItem *item) |
项进入时触发(如鼠标悬停)。 |
void itemPressed(QListWidgetItem *item) |
项被按下时触发。 |
void itemSelectionChanged() |
选中项变化时触发。 |
函数签名 | 用途说明 |
---|---|
virtual bool dropMimeData(int index, const QMimeData *data, Qt::DropAction action) |
处理拖放数据。 |
virtual QMimeData *mimeData(const QList<QListWidgetItem *> &items) const |
生成项的 MIME 数据。 |
virtual QStringList mimeTypes() const |
返回支持的 MIME 类型列表。 |
virtual Qt::DropActions supportedDropActions() const |
返回支持的拖放操作。 |
virtual void dropEvent(QDropEvent *event) override |
处理拖放事件。 |
virtual bool event(QEvent *e) override |
处理其他事件。 |
QTableWidget
表格小部件为应用程序提供标准的表格显示功能。QTableWidget
中的项由 QTableWidgetItem
提供。如果你希望使用自定义数据模型的表格,应使用 QTableView
而不是这个类。表格小部件可以通过指定所需的行数和列数进行构造:
tableWidget = new QTableWidget(12, 3, this);
另外,表格也可以在没有指定大小的情况下构造,并在之后调整大小:
tableWidget = new QTableWidget(this);
tableWidget->setRowCount(10);
tableWidget->setColumnCount(5);
项是在表格外部创建的(没有父级小部件),然后通过 setItem()
插入表格中:
QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg((row + 1) * (column + 1)));
tableWidget->setItem(row, column, newItem);
如果想要在表格小部件中启用排序,请在填充项之后进行,否则排序可能会干扰插入顺序(详见 setItem()
的说明)。表格可以有水平和垂直的表头。创建表头的最简单方法是向 setHorizontalHeaderLabels()
和 setVerticalHeaderLabels()
函数提供字符串列表。这将为表格的列和行提供简单的文本表头。更复杂的表头可以通过现有的表格项来创建,通常这些项是在表格外部构造的。例如,我们可以构造一个带有图标和对齐文本的表格项,并将其用作特定列的表头:
QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr("Cubes"));
cubesHeaderItem->setIcon(QIcon(QPixmap(":/Images/cubed.png")));
cubesHeaderItem->setTextAlignment(Qt::AlignVCenter);
可以通过 rowCount()
获取表格的行数,通过 columnCount()
获取列数。表格可以通过 clear()
函数进行清空。
API
函数签名 | 用途说明 |
---|---|
QTableWidget(QWidget *parent = nullptr) |
构造函数,创建一个 QTableWidget ,可以指定父级窗口。 |
QTableWidget(int rows, int columns, QWidget *parent = nullptr) |
构造函数,创建一个指定行数和列数的 QTableWidget 。 |
virtual ~QTableWidget() |
析构函数,释放 QTableWidget 使用的资源。 |
QWidget *cellWidget(int row, int column) const |
获取指定单元格的自定义小部件。 |
void closePersistentEditor(QTableWidgetItem *item) |
关闭指定项的持久编辑器。 |
int column(const QTableWidgetItem *item) const |
获取指定项所在的列号。 |
int columnCount() const |
返回表格的列数。 |
int currentColumn() const |
获取当前单元格的列号。 |
QTableWidgetItem *currentItem() const |
获取当前单元格的项。 |
int currentRow() const |
获取当前单元格的行号。 |
void editItem(QTableWidgetItem *item) |
进入指定项的编辑模式。 |
QList<QTableWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const |
根据文本查找项,返回匹配的项列表。 |
QTableWidgetItem *horizontalHeaderItem(int column) const |
获取指定列的水平表头项。 |
QModelIndex indexFromItem(const QTableWidgetItem *item) const |
从项获取其对应的模型索引。 |
bool isPersistentEditorOpen(QTableWidgetItem *item) const |
检查指定项的持久编辑器是否打开。 |
QTableWidgetItem *item(int row, int column) const |
获取指定行列的项。 |
QTableWidgetItem *itemAt(const QPoint &point) const |
根据点位置获取对应的项。 |
QTableWidgetItem *itemAt(int ax, int ay) const |
根据坐标获取对应的项。 |
QTableWidgetItem *itemFromIndex(const QModelIndex &index) const |
根据模型索引获取对应的项。 |
const QTableWidgetItem *itemPrototype() const |
获取项的原型。 |
QList<QTableWidgetItem *> items(const QMimeData *data) const |
从 QMimeData 中提取项。 |
void openPersistentEditor(QTableWidgetItem *item) |
打开指定项的持久编辑器。 |
void removeCellWidget(int row, int column) |
移除指定单元格关联的自定义小部件。 |
int row(const QTableWidgetItem *item) const |
获取指定项的行号。 |
int rowCount() const |
返回表格的行数。 |
QList<QTableWidgetItem *> selectedItems() const |
获取当前选中的所有项。 |
QList<QTableWidgetSelectionRange> selectedRanges() const |
获取当前选中范围的列表。 |
void setCellWidget(int row, int column, QWidget *widget) |
为指定单元格设置一个自定义小部件。 |
void setColumnCount(int columns) |
设置表格的列数。 |
void setCurrentCell(int row, int column) |
设置当前单元格。 |
void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command) |
设置当前单元格,带选择标志。 |
void setCurrentItem(QTableWidgetItem *item) |
设置当前单元格的项。 |
void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command) |
设置当前项,带选择标志。 |
void setHorizontalHeaderItem(int column, QTableWidgetItem *item) |
设置指定列的水平表头项。 |
void setHorizontalHeaderLabels(const QStringList &labels) |
设置水平表头的标签。 |
void setItem(int row, int column, QTableWidgetItem *item) |
设置指定单元格的项。 |
void setItemPrototype(const QTableWidgetItem *item) |
设置项的原型。 |
void setRangeSelected(const QTableWidgetSelectionRange &range, bool select) |
设置选中范围。 |
void setRowCount(int rows) |
设置表格的行数。 |
void setVerticalHeaderItem(int row, QTableWidgetItem *item) |
设置指定行的垂直表头项。 |
void setVerticalHeaderLabels(const QStringList &labels) |
设置垂直表头的标签。 |
void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) |
根据指定列排序表格项。 |
QTableWidgetItem *takeHorizontalHeaderItem(int column) |
移除并返回指定列的水平表头项。 |
QTableWidgetItem *takeItem(int row, int column) |
移除并返回指定行列的项。 |
QTableWidgetItem *takeVerticalHeaderItem(int row) |
移除并返回指定行的垂直表头项。 |
QTableWidgetItem *verticalHeaderItem(int row) const |
获取指定行的垂直表头项。 |
int visualColumn(int logicalColumn) const |
获取逻辑列在视图中的视觉列索引。 |
QRect visualItemRect(const QTableWidgetItem *item) const |
获取指定项的可视矩形区域。 |
int visualRow(int logicalRow) const |
获取逻辑行在视图中的视觉行索引。 |
槽函数签名 | 用途说明 |
---|---|
void clear() |
清空表格中的所有项。 |
void clearContents() |
清空表格中的所有项内容,但保留行列结构。 |
void insertColumn(int column) |
在指定列位置插入新列。 |
void insertRow(int row) |
在指定行位置插入新行。 |
void removeColumn(int column) |
移除指定列。 |
void removeRow(int row) |
移除指定行。 |
void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible) |
滚动到指定项。 |
信号签名 | 触发条件 |
---|---|
void cellActivated(int row, int column) |
单元格被激活时触发。 |
void cellChanged(int row, int column) |
单元格内容变化时触发。 |
void cellClicked(int row, int column) |
单元格被点击时触发。 |
void cellDoubleClicked(int row, int column) |
单元格被双击时触发。 |
void cellEntered(int row, int column) |
鼠标进入单元格时触发。 |
void cellPressed(int row, int column) |
单元格被按下时触发。 |
void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) |
当前单元格变化时触发。 |
void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous) |
当前项变化时触发。 |
void itemActivated(QTableWidgetItem *item) |
项被激活时触发。 |
void itemChanged(QTableWidgetItem *item) |
项状态变化时触发。 |
void itemClicked(QTableWidgetItem *item) |
项被点击时触发。 |
void itemDoubleClicked(QTableWidgetItem *item) |
项被双击时触发。 |
void itemEntered(QTableWidgetItem *item) |
项进入时触发(如鼠标悬停)。 |
void itemPressed(QTableWidgetItem *item) |
项被按下时触发。 |
void itemSelectionChanged() |
选中项变化时触发。 |
函数签名 | 用途说明 |
---|---|
virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action) |
处理拖放操作。 |
virtual QMimeData *mimeData(const QList<QTableWidgetItem *> &items) const |
创建可放置项的数据。 |
virtual QStringList mimeTypes() const |
返回支持的 MIME 类型列表。 |
virtual Qt::DropActions supportedDropActions() const |
返回支持的拖放操作类型。 |
函数签名 | 用途说明 |
---|---|
virtual void dropEvent(QDropEvent *event) override |
处理拖放事件。 |
virtual bool event(QEvent *e) override |
处理其他事件。 |
QTreeWidget
QTreeWidget
类是一个方便的类,提供了一个标准的树形小部件,其经典的基于项目的接口类似于 Qt 3 中的 QListView
类。该类基于 Qt 的模型/视图架构,使用默认模型来保存项目,每个项目都是一个 QTreeWidgetItem
。开发者如果不需要模型/视图框架的灵活性,可以使用这个类非常简单地创建层次结构列表。更灵活的方法是将 QTreeView
与标准项目模型结合使用,这样可以将数据的存储与其表示分开。
最简单的树形小部件可以通过以下方式构造:
QTreeWidget *treeWidget = new QTreeWidget();
treeWidget->setColumnCount(1);
QList<QTreeWidgetItem *> items;
for (int i = 0; i < 10; ++i)
items.append(new QTreeWidgetItem(static_cast<QTreeWidget *>(nullptr), QStringList(QString("item: %1").arg(i))));
treeWidget->insertTopLevelItems(0, items);
在将项目添加到树形小部件之前,必须使用 setColumnCount()
设置列数。这允许每个项目具有一个或多个标签或其他装饰。可以通过 columnCount()
函数获取当前使用的列数。
树形小部件可以有一个头部,为每一列提供一个部分。最简单的方法是通过 setHeaderLabels()
提供一个字符串列表来设置每个部分的标签,但也可以使用 QTreeWidgetItem
构造自定义头部,并通过 setHeaderItem()
函数插入到树中。
树中的项目可以根据预定义的排序顺序按列进行排序。如果启用了排序,用户可以通过点击列标题来对项目进行排序。排序可以通过调用 setSortingEnabled()
来启用或禁用。使用 isSortingEnabled()
函数可以检查排序是否启用。
API
函数签名 | 用途说明 |
---|---|
QTreeWidget(QWidget *parent = nullptr) |
构造一个树形小部件,可选择指定父级小部件。 |
virtual ~QTreeWidget() |
析构函数,释放资源。 |
函数签名 | 用途说明 |
---|---|
void addTopLevelItem(QTreeWidgetItem *item) |
添加顶级项目。 |
void addTopLevelItems(const QList<QTreeWidgetItem *> &items) |
添加多个顶级项目。 |
void closePersistentEditor(QTreeWidgetItem *item, int column = 0) |
关闭持久编辑器。 |
int columnCount() const |
获取列数。 |
int currentColumn() const |
获取当前列。 |
QTreeWidgetItem *currentItem() const |
获取当前项目。 |
void editItem(QTreeWidgetItem *item, int column = 0) |
编辑指定项目。 |
QList<QTreeWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const |
查找匹配的项目。 |
QTreeWidgetItem *headerItem() const |
获取头部项目。 |
QModelIndex indexFromItem(const QTreeWidgetItem *item, int column = 0) const |
从项目获取模型索引。 |
int indexOfTopLevelItem(QTreeWidgetItem *item) const |
获取顶级项目的索引。 |
void insertTopLevelItem(int index, QTreeWidgetItem *item) |
在指定位置插入顶级项目。 |
void insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items) |
在指定位置插入多个顶级项目。 |
QTreeWidgetItem *invisibleRootItem() const |
获取不可见的根项目。 |
bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const |
判断持久编辑器是否打开。 |
QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const |
获取指定项目上方的项目。 |
QTreeWidgetItem *itemAt(const QPoint &p) const |
获取指定位置的项目。 |
QTreeWidgetItem *itemAt(int x, int y) const |
获取指定坐标的项目。 |
QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const |
获取指定项目下方的项目。 |
QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const |
从模型索引获取项目。 |
QWidget *itemWidget(QTreeWidgetItem *item, int column) const |
获取项目的自定义小部件。 |
void openPersistentEditor(QTreeWidgetItem *item, int column = 0) |
打开持久编辑器。 |
void removeItemWidget(QTreeWidgetItem *item, int column) |
移除项目的小部件。 |
QList<QTreeWidgetItem *> selectedItems() const |
获取所选项目列表。 |
void setColumnCount(int columns) |
设置列数。 |
void setCurrentItem(QTreeWidgetItem *item) |
设置当前项目。 |
void setCurrentItem(QTreeWidgetItem *item, int column) |
设置当前项目及其列。 |
void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command) |
设置当前项目及其列和选择标志。 |
void setHeaderItem(QTreeWidgetItem *item) |
设置头部项目。 |
void setHeaderLabel(const QString &label) |
设置单个头部标签。 |
void setHeaderLabels(const QStringList &labels) |
设置多个头部标签。 |
void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget) |
为项目设置自定义小部件。 |
int sortColumn() const |
获取当前排序列。 |
void sortItems(int column, Qt::SortOrder order) |
按指定列排序。 |
QTreeWidgetItem *takeTopLevelItem(int index) |
移除并返回指定索引的顶级项目。 |
QTreeWidgetItem *topLevelItem(int index) const |
获取指定索引的顶级项目。 |
int topLevelItemCount() const |
获取顶级项目的数量。 |
QRect visualItemRect(const QTreeWidgetItem *item) const |
获取项目的可视区域。 |
函数签名 | 用途说明 |
---|---|
virtual void setSelectionModel(QItemSelectionModel *selectionModel) override |
设置选择模型。 |
函数签名 | 用途说明 |
---|---|
void clear() |
清空树形小部件的所有项目。 |
void collapseItem(const QTreeWidgetItem *item) |
折叠指定项目。 |
void expandItem(const QTreeWidgetItem *item) |
展开指定项目。 |
void scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible) |
滚动到指定项目。 |
函数签名 | 用途说明 |
---|---|
void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) |
当前项目改变信号。 |
void itemActivated(QTreeWidgetItem *item, int column) |
项目激活信号。 |
void itemChanged(QTreeWidgetItem *item, int column) |
项目变化信号。 |
void itemClicked(QTreeWidgetItem *item, int column) |
项目点击信号。 |
void itemCollapsed(QTreeWidgetItem *item) |
项目折叠信号。 |
void itemDoubleClicked(QTreeWidgetItem *item, int column) |
项目双击信号。 |
void itemEntered(QTreeWidgetItem *item, int column) |
项目进入信号。 |
void itemExpanded(QTreeWidgetItem *item) |
项目展开信号。 |
void itemPressed(QTreeWidgetItem *item, int column) |
项目按下信号。 |
void itemSelectionChanged() |
项目选择变化信号。 |
函数签名 | 用途说明 |
---|---|
virtual bool dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action) |
处理拖放数据。 |
virtual QMimeData *mimeData(const QList<QTreeWidgetItem *> &items) const |
创建可放置项的数据。 |
virtual QStringList mimeTypes() const |
返回支持的 MIME 类型列表。 |
virtual Qt::DropActions supportedDropActions() const |
返回支持的拖放操作类型。 |
函数签名 | 用途说明 |
---|---|
virtual void dropEvent(QDropEvent *event) override |
处理拖放事件。 |
virtual bool event(QEvent *e) override |
处理其他事件。 |