简介: 下拉列表框QComboBox
和富文本编辑器QPlainTextEdit
的介绍和使用
[TOC]
本文初发于 “偕臧的小站“,同步转载于此。
配置环境:
编程环境: win10 x64 专业版 1803
编程软件: Qt Creator 4.8.2 (Enterprise)
, Qt 5.9.8
运行效果:
先上一个最终的运行效果图:
QComboBox属性:
QComboBox
是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个QLineEdit
用作输入。QComboBox
除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个QVariant类型的变量,用于存储一些不可见数据。
QComboBox
存储的项是一个列表,但是QComboBox
不提供整个列表用于访问,可以通过索引访问某个项。访问项的一些函数主要有以下几种。其一些基本属性和常用函数介绍:
常用函数 | 含义 |
---|---|
int currentIndex( ) | 返回当前项的序号,第一个项的序号为0 |
QString currentText( ) | 返回当前项的文字 |
QVariant currentData(int role=Qt:UserRole) | 返回当前项的关联数据,数据的缺省角色role=Qt:UserRole |
QString itemText(int index) | 返回指定索引号的项的文字 |
QVariant itemData(int index,int role=Qt::UserRole) | 返回指定索引号的项的关联数据 |
int count() | 返回项的个数 |
在一个QComboBox组件上选择项发生变化时,会发射如下两个信号:
这两个信号只是传递的参数不同,一个传递的是当前项的索引号,一个传递的当前项的文字。
void currentIndexChanged(int index)
void currentIndexChanged(const QString &text)
QPlain TextEdit属性:
QPlainTextEdit
是一个多行文本编辑器,用于显示和编辑多行简单文本。另外,还有一个QTextEdit
组件,是一个所见即所得的可以编辑带格式文本的组件,以HTML格式标记符定义文本格式。
QPlainTextEdit
提供**cut( )、copy( )、paste( )、undo( )、redo( )、clear( )、selectAll( )**等标准编辑功
能的槽函数,QPlainTextEdit
还提供一个标准的右键快捷菜单。
QPlainTextEdit
的文字内容以QTextDocument类型存储,函数document()
返回这个文档对象的
指针。
QTextDocument是内存中的文本对象,以文本块的方式存储,一个文本块就是一个段落,每
个段落以回车符结束。QTextDocument提供一些函数实现对文本内容的存取。
常用函数 | 含义() |
---|---|
appendPlainText() | 向QPlain TextEdit添加一行话 |
int blockCount() | 获得文本块个数 |
QTextBlock findBlockByNumber(int blockNumber) | 读取某一个文本块,序号从0开始,至blockCount()-1结束。 |
一个document有多个TextBlock,从document中读取出的一个文本块类型为QTextBlock,通过QTextBlock.:text()
函数可以获取其纯文本文字。
核心源码:
//左上角区域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//初始化简单的QComboBox控件
void ExQcomboBox::on_btnLeftInit_clicked()
{
QIcon ico;
ico.addFile(":/images/github.ico");
ui->comBoxLeft->clear();
for (int i = 0; i < 13; i++) {
ui->comBoxLeft->addItem(ico, QString("第%1个item项").arg(i)); //带有ico图标的项
}
}
//清除简单的QComboBox控件
void ExQcomboBox::on_btnLeftClear_clicked()
{
ui->comBoxLeft->clear();
}
//勾选QComboBox为可以编辑状态
void ExQcomboBox::on_checkBoxOnlyWrite_clicked()
{
if(ui->checkBoxOnlyWrite->isChecked())
ui->comBoxLeft->setEditable(true);
else
ui->comBoxLeft->setEditable(false);
}
//右上角区域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//初始化复杂的QComboBox控件(给每一项都添加一个对应的自定义数据[不显示])
void ExQcomboBox::on_btnRightInit_clicked()
{
QIcon ico;
ico.addFile(":/images/gril.ico");
QMap<QString, QString> map;
map.insert("张投", "16岁");
map.insert("张我", "17岁");
map.insert("张以", "18岁");
map.insert("张木", "19岁");
map.insert("张李", "20岁");
map.insert("张,", "21岁");
map.insert("张报", "22岁");
map.insert("张之", "23岁");
map.insert("张以", "24岁");
map.insert("张琼", "25岁");
map.insert("张玖", "26岁");
map.insert("张。", "27岁");
ui->comBoxRight->clear();
foreach(QString str, map.keys()){
ui->comBoxRight->addItem(ico, str, map.value(str)); //因为有Map,所以QComboBox显示会按照key排序,而非上面的定义顺序,注意不是map.key(str)
}
}
//底部区域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//文本框内容每次读取一行,添加到ComboBox作为item项
void ExQcomboBox::on_btnBottomAdd_clicked()
{
QTextDocument* doc = ui->plainTextEdit->document(); //获取文本对象
int cnt = doc->blockCount(); //回车符是一个block
QIcon ico;
ico.addFile(":/images/github.ico");
ui->comBoxLeft->clear();
ui->comBoxRight->clear();
for (int i = 0; i < cnt; i++) {
QTextBlock text = doc->findBlockByNumber(i); //获取文本中一段(以换行为标志)
ui->comBoxLeft->addItem(ico, text.text());
ui->comBoxRight->addItem(ico, text.text(), QString("附加内容:%1").arg(i));
}
}
//清除可编辑的富文本的编辑器的所有内容
void ExQcomboBox::on_btnBottomClear_clicked()
{
ui->plainTextEdit->clear();
}
//设置富文本的编辑器(plainTextEdit)只可读
void ExQcomboBox::on_checkBoxOnlyRead_clicked()
{
if(ui->checkBoxOnlyRead->isChecked())
ui->plainTextEdit->setEnabled(false);
else
ui->plainTextEdit->setEnabled(true);
}
//公共的槽函数区域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//显示当前选中的ComboBox的item项的内容
void ExQcomboBox::onSelectDisplay(QString str)
{
QString strData = ui->comBoxRight->currentData().toString(); // 获取当前item的关联数据的内容
ui->labDisplay->setText(str + " " + strData);
ui->plainTextEdit->appendPlainText(str + " " + strData);
}
源码下载:
QtExamples【QtQlistWidgetEx】
开心分享:
因为有着许许多多的热心网友的无私分享,从他们的博客中学习成长,学会很多,故也不辞辛苦也将自己的项目或经验整理成博客的形式,也提供给一起大家学习探讨与交流