C/C++ Qt StringListModel 字符串列表映射组件详解

2022-07-20,,,,

stringlistmodel 字符串列表映射组件,该组件用于处理字符串与列表框组件中数据的转换,通常该组件会配合listview组件一起使用,例如将listview组件与model模型绑定,当listview组件内有数据更新时,我们就可以利用映射将数据模型中的数值以字符串格式提取出来,同理也可实现将字符串赋值到指定的listview组件内。

首先在ui界面中排版

默认的mainwindow::mainwindow构造函数中,我们首先初始化一个qstringlist字符串链表并对该链表赋值,通过new qstringlistmodel(this);创建一个数据模型,并通过ui->listview->setmodel(model);属性将模型与listview组件绑定,当listview组件被选中是则触发on_listview_clicked事件实现输出当前选中行,其初始化代码部分如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qstringlist>
#include <qstringlistmodel>

mainwindow::mainwindow(qwidget *parent): qmainwindow(parent), ui(new ui::mainwindow)
{
    ui->setupui(this);

    // 初始化一个stringlist字符串列表
    qstringlist thestringlist;
    thestringlist << "北京" << "上海" << "广州";

    // 创建并使用数据模型
    model = new qstringlistmodel(this);     // 创建模型
    model->setstringlist(thestringlist);    // 导入模型数据

    ui->listview->setmodel(model);          // 为listview设置模型
    ui->listview->setedittriggers(qabstractitemview::doubleclicked |
                                  qabstractitemview::selectedclicked);
}

mainwindow::~mainwindow()
{
    delete ui;
}

// 当listview列表项被选中时,显示qmodelindex的行、列号
void mainwindow::on_listview_clicked(const qmodelindex &index)
{
        ui->labinfo->settext(qstring::asprintf("当前项:row=%d, column=%d",
                            index.row(),index.column()));
}

代码运行效果:

添加代码:需要通过model->index()获取到最后一行的索引,然后使用model->setdata()追加写入数据到最后一条索引位置。
插入代码: 需要通过ui->listview->currentindex()获取到当前光标位置,并调用model->setdata()插入到指定位置。
删除代码: 直接调用model->removerows()等函数即可将指定位置删除。

// 添加一行
void mainwindow::on_btnlistappend_clicked()
{
    model->insertrow(model->rowcount());                       // 在尾部插入一行
    qmodelindex index = model->index(model->rowcount()-1,0);   // 获取最后一行的索引
    qstring linetext = ui->lineedit->text();
    model->setdata(index,linetext,qt::displayrole);            // 设置显示文字
    ui->listview->setcurrentindex(index);                      // 设置当前行选中
    ui->lineedit->clear();
}

// 插入一行数据到listview
void mainwindow::on_btnlistinsert_clicked()
{
    qmodelindex index;

    index= ui->listview->currentindex();             // 获取当前选中行
    model->insertrow(index.row());                   // 在当前行的前面插入一行
    qstring linetext = ui->lineedit->text();
    model->setdata(index,linetext,qt::displayrole);             // 设置显示文字
    model->setdata(index,qt::alignright,qt::textalignmentrole); // 设置对其方式
    ui->listview->setcurrentindex(index);                       // 设置当前选中行
}

// 删除当前选中行
void mainwindow::on_btnlistdelete_clicked()
{
    qmodelindex index;
    index = ui->listview->currentindex();    // 获取当前行的modelindex
    model->removerow(index.row());           // 删除选中行
}

// 清除当前列表
void mainwindow::on_btnlistclear_clicked()
{
   model->removerows(0,model->rowcount());
}

代码运行效果:

如果需要实现将listview数据模型中的数据导出到plaintextedit组件中,则需要通过model->stringlist()获取到listview中的每行并将其赋值到qstringlist字符串链表中,最后通过循环的方式依次插入到plaintextedit中即可,插入时默认会以逗号作为分隔符。

// 显示数据模型文本到qplaintextedit
void mainwindow::on_btntextimport_clicked()
{
    qstringlist plist;

    plist = model->stringlist();    // 获取数据模型的stringlist
    ui->plaintextedit->clear();     // 先清空文本框

    // 循环追加数据
    for(int x=0;x< plist.count();x++)
    {
        ui->plaintextedit->appendplaintext(plist.at(x) + qstring(","));
    }
}

代码运行效果:

到此这篇关于c/c++ qt stringlistmodel 字符串列表映射组件的文章就介绍到这了,更多相关c++ qt stringlistmodel 字符串列表映射组件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

《C/C++ Qt StringListModel 字符串列表映射组件详解.doc》

下载本文的Word格式文档,以方便收藏与打印。