QT常见页面设计组件——QComboBox和QPlainTextEdit

QComboBox是一个下拉列表框组件类,它提供一个下拉列表供用户选择,也可以当作一个QLineEdit用作输入。QComboBox处理显示可见下拉列表外,每个项还可以关联一个QVariant类型的变量,用于储存一些不可见的数据

QPlainTextEdit是一个多行文本编辑器,用于显示和编辑多行简单文本

实例效果如下:

QT常见页面设计组件——QComboBox和QPlainTextEdit_第1张图片

QComboBox的使用

1.设置属性设置

QComboBox主要的功能是提供一个下拉列表共选择输入。在界面设置放置一个QComboBox组件后,双击该组件,可以出现如下图所示的对话框,在该对话框中,可以进行编辑、删除、添加、上移和下移操作,还可以设置项的图标

QT常见页面设计组件——QComboBox和QPlainTextEdit_第2张图片

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));  //带图标
    }
}

QT常见页面设计组件——QComboBox和QPlainTextEdit_第3张图片

添加一个项时也可以指定一个图标,图标来源于资源文件

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));
}

这里定义了一个关联容器QMapCity_Zone,用于储存<城市,区号>映射表。为City_Zone填充数据之后,给comboBox添加项时,使用了foreach关键字遍历City_Zone.keys(),添加项的语句为:

ui->combox_site->addItem(str,City_Zone.value(str));

城市名称作为项显示的字符串,区号作为项关联的用户数据,但是在列表框里只能看到城市名称

但是,将City_Zone中的内容添加到列表框之后,列表框中的显示顺序并不一定和源程序设置的顺序一致,因为QMap容器类会自动按照key排序

4.QComboBOx列表项的访问

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组件上选择项发生变化时,会发射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的功能

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提供一些函数实现对文本内容的存取

  • int blockCount(),返回文本块个数
  • QTextBlock finBlockByNumber(int blockNumber),读取一个文本块,序号从0开始,到blockCount-1

一个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);
}

 

你可能感兴趣的:(Qt)