QtExamples/QtQcomboBoxEx/ExQcomboBox.cpp
touwoyimuli 4342e0091c feat: QComboBox and QPlainTextEdit
QComboBox(下拉列表框)和QPlainTextEdit(可同时编辑多行的富文本编辑器)的介绍和使用
2019-08-28 19:31:56 +08:00

121 lines
3.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "ExQcomboBox.h"
#include "ui_ExQcomboBox.h"
#include <QMap>
#include <QTextBlock>
#include <QDebug>
ExQcomboBox::ExQcomboBox(QWidget *parent) :
QWidget(parent),
ui(new Ui::ExQcomboBox)
{
ui->setupUi(this);
setWindowTitle(QObject::tr("QComboBox和QPlainTextEdit的用法"));
connect(ui->comBoxRight, &QComboBox::currentTextChanged, this, &ExQcomboBox::onSelectDisplay);
}
ExQcomboBox::~ExQcomboBox()
{
delete ui;
}
//左上角区域+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//初始化简单的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);
}