> 技术文档 > Text Edit + ComboBox 属性(2)

Text Edit + ComboBox 属性(2)


文章目录

  • Text Edit
    • 1. 代码示例
    • 2. 核心属性
    • 3. 核心信号
  • ComboBox
    • 1. 代码示例
    • 2. 核心属性
    • 3. 核心方法
    • 4. 核心信号

Text Edit

QTextEdit表示多行输入框,也是一个富文本markdown编辑器,并且能在内容超出编辑框范围时自动提供滚动条

QPlainTextEdit只能表示纯文本(Plain Text),QTextEdit不仅能表示纯文本,还可以表示htmlmarkdown

1. 代码示例

编辑widget.ui文件,创建一个labelText Edit控件,右键Text Edit控件,转到槽,选择textChanged信号去定义槽函数

Text Edit + ComboBox 属性(2)

// widget.cppvoid Widget::on_textEdit_textChanged(){ // 获取到多行输入框中的内容,将该内容设置到label上 const QString& text = ui->textEdit->toPlainText(); ui->label->setText(text);}

Text Edit + ComboBox 属性(2)

2. 核心属性

属性名 说明 markdown 输入框内持有的内容。支持 Markdown 格式,能够自动将 Markdown 文本渲染成 HTML html 输入框内持有的内容。可以支持大部分 HTML 标签,包括 imgtableplaceHolderText 输入框为空时提示的内容 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信号

Text Edit + ComboBox 属性(2)

selectionChanged信号,这里按住键盘上的shift键 + 左右方向键,可以逐个选中内容(多行内容,也可以按上下方向键进行选中)

Text Edit + ComboBox 属性(2)

cursorPositionChanged()

Text Edit + ComboBox 属性(2)

剩余三个信号:undo, redo, copy + Available,哪个是true按下组合键就有效,比如说undoAvailable: fasle,按下ctrl + z就无法撤销

Text Edit + ComboBox 属性(2)

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表示一个下拉框

Text Edit + ComboBox 属性(2)

1. 代码示例

使用下拉框模拟麦当劳点餐。首先在界面上创建三个下拉框,三个label标签和一个提交按钮

Text Edit + ComboBox 属性(2)

接下来往下拉框中添加文本内容,有两种方式,先来看第一种代码方式,编辑widget.cpp

#include \"widget.h\"#include \"ui_widget.h\"#includeWidget::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();}

Text Edit + ComboBox 属性(2)

往下拉框添加文本内容,第二种方式,右键下拉框,编辑项目,直接在界面上添加。与上面代码的效果是相同的

Text Edit + ComboBox 属性(2)

但是在实际应用中,下拉框里面的内容很多时候并不是代码中写死的,而是通过文件或网络加载数据得到的(比如选课操作)

从文件中读取下拉框文本内容的实现方法如下:

还是先来最简单的操作,编辑widget.ui,在界面上创建一个label和下拉框控件

Text Edit + ComboBox 属性(2)

在本地新建一个名称为data(任意取)的文本文件,要能找到该文件的路径,后面写代码读取文件要用,后续从文件中读取文本内容时,路径后面要跟上文件名(包括后缀),将\\改为/

Text Edit + ComboBox 属性(2)

在编辑widget.cpp源文件前,需要补充文件读写相关的知识。C语言使用fopen函数进行操作,而C++则提供了fstream类来实现这一功能

fstream类可分为ifstream(输入流类)和ofstream(输出流类)。关于文件输入(input)和输出(output)的区分:输入指从文件读取数据到程序,输出则是将程序数据写入文件

Text Edit + ComboBox 属性(2)

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#includeWidget::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;}

Text Edit + ComboBox 属性(2)

2. 核心属性

属性名 说明 currentText 当前选中的文本。 currentIndex 当前选中的条目索引(从0开始)。
若无选中项,值为-1editable 是否允许用户修改文本。
设为true时,行为接近QLineEdit,可设置验证器validator iconSize 下拉框图标(小三角)的尺寸(像素)。 maxCount 允许的最大条目数量。

3. 核心方法

方法名 说明 addItem(const QString &) 添加一个条目到列表末尾。 currentIndex() 获取当前选中的条目索引(从0开始)。
若无选中项,返回-1currentText() 获取当前选中的条目文本。

4. 核心信号

信号名 说明 activated(int) 当用户选择了一个选项时发出,参数为选项索引。 activated(const QString &text) 当用户点开下拉框并鼠标划过某个选项时发出,此时尚未确认选择,参数为选项文本。 currentIndexChanged(int) 当前选项改变时发出,参数为新选项索引。 currentIndexChanged(const QString &text) 当前选项改变时发出,参数为新选项文本。
用户或程序操作都会触发。 editTextChanged(const QString &text) 当编辑框中的文本改变时发出(仅editable=true时有效)。