QComboBox是一个下拉列表框组件类,它提供一个下拉列表供用户选择,也可以当作一个QLineEdit用作输入。QComboBox处理显示可见下拉列表外,每个项还可以关联一个QVariant类型的变量,用于储存一些不可见的数据
QPlainTextEdit是一个多行文本编辑器,用于显示和编辑多行简单文本
实例效果如下:
QComboBox的使用
1.设置属性设置
QComboBox主要的功能是提供一个下拉列表共选择输入。在界面设置放置一个QComboBox组件后,双击该组件,可以出现如下图所示的对话框,在该对话框中,可以进行编辑、删除、添加、上移和下移操作,还可以设置项的图标
2.用代码添加简单项
窗口上的"初始化列表"按钮初始化下拉列表框的列表内容,其代码如下:
void Widget::on_btn_renew_clicked()
{
//初始化列表按钮
QIcon icon;
icon.addFile("../image/棒冰.png"); //此路径为该项目下的子目录
ui->combox_item->clear();
for (int i=0;i<10;i++) {
ui->combox_item->addItem(icon,QString::asprintf("Item %d",i)); //带图标
}
}
添加一个项时也可以指定一个图标,图标来源于资源文件
addItem()用于指定添加一个列表项,如果姿势添加字符串列表项,则数据来源于一个QStringList变量,可以使用addItem()函数,实例代码如下:
ui->comBox->clear();
QStringList strList;
strList<<"北京"<<"上海"<<"郑州";
ui->comBox->addItem(strList);
3.添加具有用户数据的项
addItem()函数有一个可选的QVariant类型的参数userData,可以利用这个变量储存用户自定义数据
实例如下:
void Widget::on_btn_cleanCity_clicked()
{
//初始化城市+区号
QMap City_Zone;
City_Zone.insert("北京",10);
City_Zone.insert("上海",11);
City_Zone.insert("广州",12);
City_Zone.insert("深圳",13);
City_Zone.insert("浙江",14);
City_Zone.insert("杭州",15);
City_Zone.insert("江苏",16);
City_Zone.insert("郑州",17);
City_Zone.insert("西华",18);
ui->combox_site->clear();
foreach(const QString &str,City_Zone.keys())
ui->combox_site->addItem(str,City_Zone.value(str));
}
这里定义了一个关联容器QMap
ui->combox_site->addItem(str,City_Zone.value(str));
城市名称作为项显示的字符串,区号作为项关联的用户数据,但是在列表框里只能看到城市名称
但是,将City_Zone中的内容添加到列表框之后,列表框中的显示顺序并不一定和源程序设置的顺序一致,因为QMap
4.QComboBOx列表项的访问
QComboBox储存的项是一个列表,但是QComboBox不提供整个列表用于访问,可以通过索引访问某个项。访问项的一些函数主要有以下几种:
在一个QComboBox组件上选择项发生变化时,会发射currentIndexChanged()信号,不同参数的currentIndex()发射的信号种类也不一样
currentIndex(int index):发射的是当前项的索引号;
currentIndex(const QString &text):发射的信号是当前项的文字;
两个ComboBox组件的槽函数如下:
void Widget::on_combox_item_currentIndexChanged(const QString &arg1)
{
//currentIndexChanged()信号的槽函数
//函数功能:如果选择项发生改变,将文字写入PlainText
ui->plainTextEdit->appendPlainText(arg1);
}
void Widget::on_combox_site_currentIndexChanged(const QString &arg1)
{
QString zone = ui->combox_site->currentData().toString();
ui->plainTextEdit->appendPlainText(arg1 + ":区号=" + zone);
}
QPlainTextEdit的功能
QPlainTextEdit是用于编辑多行文本的编辑器,可以编辑普通文本。另外,还有一个QTextEdit组件,是一个所见即所得的可以编辑带格式文本的组件,以HTML格式标记符定义文本格式
QPlainTextEdit提供cut()、copy()、paste()、redo()、undo()、clear()、selectAll()等标准编辑功能的槽函数,QPlainTextEdit()还提供了一个标准的右键快捷菜单
逐行读取文字内容
如果要将QPlainTextEdit中的内容读取,可以使用toPlainText(),其功能是将其所有文本输出为一个字符串
要想实现QPlainTextEdit()中的文本逐行读取,则需要使用以下方式:
void Widget::on_btn_add_clicked()
{
//将QPlainTextEdit中文本添加到comboBox组件中
QTextDocument* doc = ui->plainTextEdit->document(); //文本对象
int cnt = doc->blockCount(); //返回文件块的总数,每个换行是一个block
QIcon icon("../image/棒冰.png");
ui->combox_item->clear();
for(int i=0;ifindBlockByNumber(i); //文本中的一段
QString str = textLine.text();
if(!str.isEmpty())
ui->combox_item->addItem(icon,str);
}
}
QPlainTextEdit的文字内容以QTextDocument类型储存,函数document返回这个文档对象的指针
QTextDocument是内存中的文本对象,以文本块的方式储存,一个文本块就是一个段落,每个段落以换行符结束
QTextDocument提供一些函数实现对文本内容的存取
一个document有多个TextBlock,从document中读取的一个文本块类型为QTextBlock,通过QTextBlock::Text()函数可以获取其纯文本文字
QPlainTextEdit自带的快捷菜单的使用
QPlainTextEdit是一个多行文字编辑框,有自带的快捷右键菜单,可实现常见的文本编辑功能。在UI设计界面,选择为plainTextEdit的customContextMenuRequestd()信号生成槽函数,就可以创建并显示QPlainTextEdit的标准快捷菜单
void Widget::on_plainTextEdit_customContextMenuRequested(const QPoint &pos)
{
//创建并弹出右键快捷菜单
QMenu* menu = ui->plainTextEdit->createStandardContextMenu();
menu->exec(pos);
}