Text Edit + ComboBox 属性(2)
文章目录
- Text Edit
- 1. 代码示例
- 2. 核心属性
- 3. 核心信号
- ComboBox
- 1. 代码示例
- 2. 核心属性
- 3. 核心方法
- 4. 核心信号
Text Edit
QTextEdit
表示多行输入框,也是一个富文本,markdown
编辑器,并且能在内容超出编辑框范围时自动提供滚动条
QPlainTextEdit
只能表示纯文本(Plain Text
),QTextEdit
不仅能表示纯文本,还可以表示html
和markdown
1. 代码示例
编辑widget.ui
文件,创建一个label
和Text Edit
控件,右键Text Edit
控件,转到槽,选择textChanged
信号去定义槽函数
// widget.cpp
void Widget::on_textEdit_textChanged()
{// 获取到多行输入框中的内容,将该内容设置到label上const QString& text = ui->textEdit->toPlainText();ui->label->setText(text);
}
2. 核心属性
属性名 | 说明 |
---|---|
markdown | 输入框内持有的内容。支持 Markdown 格式,能够自动将 Markdown 文本渲染成 HTML |
html | 输入框内持有的内容。可以支持大部分 HTML 标签,包括 img 和 table 等 |
placeHolderText | 输入框为空时提示的内容 |
readOnly | 是否是只读的 |
undoRedoEnable | 是否开启撤销/重做(undo/redo)功能 按下 Ctrl + z 触发 undo按下 Ctrl + y 触发 redo |
autoFormating | 开启自动格式化 |
tabstopWidth | 按下缩进占多少空间 |
overwriteMode | 是否开启覆盖写模式 |
acceptRichText | 是否接收富文本内容 |
verticalScrollBarPolicy | 垂直方向滚动条的出现策略:Qt::ScrollBarAsNeeded :根据内容自动决定是否需要滚动条(默认值)Qt::ScrollBarAlwaysOff :总是关闭滚动条Qt::ScrollBarAlwaysOn :总是显示滚动条 |
horizontalScrollBarPolicy | 水平方向滚动条的出现策略:Qt::ScrollBarAsNeeded :根据内容自动决定是否需要滚动条(默认值)Qt::ScrollBarAlwaysOff :总是关闭滚动条Qt::ScrollBarAlwaysOn :总是显示滚动条 |
3. 核心信号
信号名 | 说明 |
---|---|
textChanged() | 文本内容改变时触发 |
selectionChanged() | 选中范围改变时触发 |
cursorPositionChanged() | 光标移动时触发 |
undoAvailable(bool) | 可以进行 undo 操作时触发 |
redoAvailable(bool) | 可以进行 redo 操作时触发 |
copyAvailable(bool) | 文本被选中或取消选中时触发 |
演示
QTextEdit
的这几个信号,textChanged
信号
selectionChanged
信号,这里按住键盘上的shift
键 + 左右方向键,可以逐个选中内容(多行内容,也可以按上下方向键进行选中)
cursorPositionChanged()
剩余三个信号:
undo, redo, copy + Available
,哪个是true
按下组合键就有效,比如说undoAvailable: fasle
,按下ctrl + z
就无法撤销
void Widget::on_textEdit_textChanged()
{qDebug() << "textChanged: " << ui->textEdit->toPlainText();
}void Widget::on_textEdit_selectionChanged()
{QTextCursor cursor = ui->textEdit->textCursor();qDebug() << "selectionChanged: " << cursor.selectedText();
}void Widget::on_textEdit_cursorPositionChanged()
{QTextCursor cursor = ui->textEdit->textCursor();qDebug() << "cursorPositionChanged: " << cursor.position();
}void Widget::on_textEdit_redoAvailable(bool b)
{qDebug() << "redoAvailabel: " << b;
}void Widget::on_textEdit_undoAvailable(bool b)
{qDebug() << "undoAvailable: " << b;
}void Widget::on_textEdit_copyAvailable(bool b)
{qDebug() << "copyAvailable: " << b;
}
ComboBox
QComboBox
表示一个下拉框
1. 代码示例
使用下拉框模拟麦当劳点餐。首先在界面上创建三个下拉框,三个label
标签和一个提交按钮
接下来往下拉框中添加文本内容,有两种方式,先来看第一种代码方式,编辑widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->comboBox->addItem("麦辣鸡腿堡");ui->comboBox->addItem("巨无霸");ui->comboBox->addItem("双层牛堡");ui->comboBox_2->addItem("薯条");ui->comboBox_2->addItem("麦乐鸡块");ui->comboBox_2->addItem("麦乐鸡翅");ui->comboBox_3->addItem("百事可乐");ui->comboBox_3->addItem("雪碧");
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{// 当用户选中完成后,点击提交按钮,打印出用户的选择qDebug() << ui->comboBox->currentText() << ", "<< ui->comboBox_2->currentText() << ", "<< ui->comboBox_3->currentText();
}
往下拉框添加文本内容,第二种方式,右键下拉框,编辑项目,直接在界面上添加。与上面代码的效果是相同的
但是在实际应用中,下拉框里面的内容很多时候并不是代码中写死的,而是通过文件或网络加载数据得到的(比如选课操作)
从文件中读取下拉框文本内容的实现方法如下:
还是先来最简单的操作,编辑widget.ui
,在界面上创建一个label
和下拉框控件
在本地新建一个名称为data
(任意取)的文本文件,要能找到该文件的路径,后面写代码读取文件要用,后续从文件中读取文本内容时,路径后面要跟上文件名(包括后缀),将\
改为/
在编辑widget.cpp
源文件前,需要补充文件读写相关的知识。C语言使用fopen
函数进行操作,而C++则提供了fstream
类来实现这一功能
fstream
类可分为ifstream
(输入流类)和ofstream
(输出流类)。关于文件输入(input
)和输出(output
)的区分:输入指从文件读取数据到程序,输出则是将程序数据写入文件
ui->comboBox->addItem()
,这个函数要求的参数类型是QString
,并不是std::string
,虽然都是字符串,但它们是不同的类型
此处就需要进行手动转换,QString::fromStdString(line)
,就可以将std::string
转换成QString
QString s; s.toStdString();
可以将QString
转换成std::string
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<fstream>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 需要读取文件内容,把文件中的每一行读取出来,作为一个ComboBox选项std::ifstream file("D:/Qt proc_position/ComboBox_2/data.txt"); // 将"/"改成"\"if (!file.is_open()){qDebug() << "文件打开失败";exit(-1);}// getline函数按行来读取文本内容std::string line;while (std::getline(file, line)){// 取到的每一行内容,设置到下拉框中ui->comboBox->addItem(QString::fromStdString(line));}file.close();// 记得关闭文件
}Widget::~Widget()
{delete ui;
}
2. 核心属性
属性名 | 说明 |
---|---|
currentText | 当前选中的文本。 |
currentIndex | 当前选中的条目索引(从0开始)。 若无选中项,值为 -1 。 |
editable | 是否允许用户修改文本。 设为 true 时,行为接近QLineEdit ,可设置验证器validator |
iconSize | 下拉框图标(小三角)的尺寸(像素)。 |
maxCount | 允许的最大条目数量。 |
3. 核心方法
方法名 | 说明 |
---|---|
addItem(const QString &) | 添加一个条目到列表末尾。 |
currentIndex() | 获取当前选中的条目索引(从0开始)。 若无选中项,返回 -1 。 |
currentText() | 获取当前选中的条目文本。 |
4. 核心信号
信号名 | 说明 |
---|---|
activated(int) | 当用户选择了一个选项时发出,参数为选项索引。 |
activated(const QString &text) | 当用户点开下拉框并鼠标划过某个选项时发出,此时尚未确认选择,参数为选项文本。 |
currentIndexChanged(int) | 当前选项改变时发出,参数为新选项索引。 |
currentIndexChanged(const QString &text) | 当前选项改变时发出,参数为新选项文本。 用户或程序操作都会触发。 |
editTextChanged(const QString &text) | 当编辑框中的文本改变时发出(仅editable=true 时有效)。 |