文章目录
- 1. 实例功能概述
- 2. 源码
- 2.1 可视化UI设计
- 2.2 widget.h
- 2.3 widget.cpp
1. 实例功能概述
QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个QLineEdit 用作输入。OComboBox 除了显示可见下拉列表外,每个项 (item,或称列表项)还可以关联一个 QVariant 类型的变量,用于存储一些不可见数据。
QPlainTextEdit 是一个多行文本编辑器,用于显示和编辑多行简单文本。实例 samp4_6 演示QComboBox和QPlainTextEdit 的使用,其运行时界面如图4-6 所示。
关于"QComboBox 的使用"和“QPlainTextEdit 的使用”请参考下面源码和《Qt5.9 c++开发指南》
2. 源码
2.1 可视化UI设计
2.2 widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_btnIniItems_clicked();void on_btnClearItems_clicked();void on_chkBoxEditable_clicked(bool checked);void on_comboBox_currentIndexChanged(const QString &arg1);void on_btnClearText_clicked();void on_chkBoxReadonly_clicked(bool checked);void on_btnToComboBox_clicked();void on_plainTextEdit_customContextMenuRequested(const QPoint &pos);void on_btnIni2_clicked();void on_comboBox2_currentIndexChanged(const QString &arg1);private:Ui::Widget *ui;
};#endif // WIDGET_H
2.3 widget.cpp
#include "widget.h"
#include "ui_widget.h"#include <QTextDocument>
#include <QTextBlock>
#include <QMenu>#include <QMap>
#include <QVariant>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_btnIniItems_clicked()
{ //"初始化列表"按键QIcon icon;icon.addFile(":/images/icons/aim.ico");ui->comboBox->clear(); //清除列表for (int i=0;i<20;i++)ui->comboBox->addItem(icon,QString::asprintf("Item %d",i)); //添加一个字符串
// ui->comboBox->addItem(QString::asprintf("Item %d",i)); //添加一个字符串// QStringList strList;
// strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";
// ui->comboBox->addItems(strList);
}void Widget::on_btnClearItems_clicked()
{ui->comboBox->clear(); //清除条目
}void Widget::on_chkBoxEditable_clicked(bool checked)
{ //设置comboBox是否可编辑ui->comboBox->setEditable(checked);
}void Widget::on_comboBox_currentIndexChanged(const QString &arg1)
{ //comboBox选择一个条目时,文本添加到 plainTextEditui->plainTextEdit->appendPlainText(arg1);
}void Widget::on_btnClearText_clicked()
{ //清除文本框ui->plainTextEdit->clear();
}void Widget::on_chkBoxReadonly_clicked(bool checked)
{//设置 plainTextEdit 的 ReadOnly 属性ui->plainTextEdit->setReadOnly(checked);
}void Widget::on_btnToComboBox_clicked()
{ //plainTextEdit 的内容逐行添加为 comboBox 的条目QTextDocument* doc=ui->plainTextEdit->document(); //QPlainTextEdit 的内容保存在一个 QTextDocument 里int cnt=doc->blockCount();//QTextDocument分块保存内容,文本文件就是硬回车符是一个block,QIcon icon(":/images/icons/aim.ico");ui->comboBox->clear(); //清除条目for (int i=0; i<cnt;i++) //扫描所有 blobk{QTextBlock textLine=doc->findBlockByNumber(i);//用blobk编号获取block,就是获取一行QString str=textLine.text(); //转换为文本ui->comboBox->addItem(icon,str); //添加一个条目到comboBox}
}void Widget::on_plainTextEdit_customContextMenuRequested(const QPoint &pos)
{ //创建并显示标准弹出式菜单QMenu* menu=ui->plainTextEdit->createStandardContextMenu(); //创建标准右键菜单
// menu->exec(QCursor::pos());//在鼠标光标位置显示右键快捷菜单menu->exec(pos);//在鼠标光标位置显示右键快捷菜单
}void Widget::on_btnIni2_clicked()
{//初始化具有自定义数据的comboBox
//QMap自动根据 key排序QMap<QString, int> City_Zone;City_Zone.insert("北京",10);City_Zone.insert("上海",21);City_Zone.insert("天津",22);City_Zone.insert("大连",411);City_Zone.insert("锦州",416);City_Zone.insert("徐州",516);City_Zone.insert("福州",591);City_Zone.insert("青岛",532);ui->comboBox2->clear();foreach(const QString &str,City_Zone.keys())ui->comboBox2->addItem(str,City_Zone.value(str));
}void Widget::on_comboBox2_currentIndexChanged(const QString &arg1)
{ //条目有用户数据QString zone=ui->comboBox2->currentData().toString();ui->plainTextEdit->appendPlainText(arg1+":区号="+zone);
}