QT第六天

QComboBox和QPlainTextEdit的用法

QComboBox的使用

设计时属性设置

在界面上放置QComboBox组件后,双击组件,弹出列表项编辑器对话框
在这里插入图片描述
可以在对话框中添加列表项,设置项的图标。

用代码添加简单项

包含addItem与addItems区分

void Widget::on_pushButton_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));//含图标的初始化
                                                                   //addItem用于添加一个列表项
                                                                   //addItems用于添加多个列表项
    }
}
void Widget::on_pushButton_3_clicked()//添加多项按钮
                                      //这里就使用了addItems()
{
   QIcon icon;
   icon.addFile(":/images/icons/UNIT.ICO");
   ui->comboBox->clear();
   QStringList strList;
   strList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"山西";
   ui->comboBox->addItems(strList);//addItems无法添加图标
}

添加具有用户数据的项

void Widget::on_pushButton_4_clicked()//初始化城市+区号按钮
{
    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->comboBox_2->clear();
    foreach(const QString &str ,City_Zone.keys())
    {
        ui->comboBox_2->addItem(str,City_Zone.value(str));
    }
}

QComboBox列表项的访问

void Widget::on_comboBox_2_currentIndexChanged(const QString &arg1)//改变comboBox_2中的选项时触发
{
    QString  zone=ui->comboBox_2->currentData().toString();//项关联的数据
    ui->plainTextEdit->appendPlainText(arg1+":"+zone);
}


void Widget::on_comboBox_currentIndexChanged(const QString &arg1)//改变comboBox中的选项时触发
{
    ui->plainTextEdit->appendPlainText(arg1);
}

QPlainTextEdit

逐行读取文字内容

void Widget::on_pushButton_5_clicked()//文本框内容添加到ComboBox按钮
{
    QTextDocument *doc=ui->plainTextEdit->document();//文本对象
    //QTextDocument是内存中的文本对象,以文本块的方式存储,一个文本块就是一个段落,每个段落以回车符结束
    //提供的函数
    //int blockCount()获取文本块个数
    //QtextBlock findBlockByNumber(int blockNumber)读取某个文本块,序号从0开始至blockCount()-1
    //一个document有多个TextBlock
    //从一个document中读取的一个文本块类型为QTextBlock,通过QTextBlock::text()可以获取纯文字文本
    int cnt=doc->blockCount();//计算文本块个数
    QIcon icon;
    icon.addFile(":/images/icons/aim.ico");
    for(int i=0;i<cnt;i++)
    {
        QTextBlock textLine=doc->findBlockByNumber(i);//文本中的一段
                                                      //需要添加头文件#include<QTextBlock>
        QString str=textLine.text();//从TextBlock类型转换为QString类型
        ui->comboBox->addItem(icon,str);//添加到comboBox中
    }
}

使用QPlainTextEdit自带的快捷菜单

void Widget::on_plainTextEdit_customContextMenuRequested(const QPoint &pos)//实现右键快捷菜单
{
    QMenu *menu=ui->plainTextEdit->createStandardContextMenu();//需要添加头文件#include<QMenu>
    menu->exec(pos);//在鼠标点击的位置出现
}

其他功能的实现代码

void Widget::on_pushButton_2_clicked()//清除列表按钮
{
    ui->comboBox->clear();
}
void Widget::on_checkBox_clicked(bool checked)//可编辑选项
{
    if(checked)
    {
        ui->comboBox->setEditable(true);
    }
    else
        ui->comboBox->setEditable(false);
}
void Widget::on_checkBox_2_clicked(bool checked)//read only选项
{
    ui->plainTextEdit->setReadOnly(checked);
}


void Widget::on_pushButton_6_clicked()//清空文本按钮
{
    ui->plainTextEdit->clear();
}

运行结果

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/theRookie1/article/details/84702921