QStringListModel的使用

主要为 :添加、插入、修改、删除、清空等操作

例子:本例子中QListView 没有做任何处理,只是拖放至ui文件,设置了布局

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStringListModel>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_btnRecovery_clicked();

    void on_listView_clicked(const QModelIndex &index);

    void on_btnClearText_clicked();

    void on_btnShowModel_clicked();

    void on_btnAdd_clicked();

    void on_btnInsert_clicked();

    void on_btnDel_clicked();

    void on_btnClear_clicked();

private:
    Ui::MainWindow *ui;
    QStringListModel *model;
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    model = new QStringListModel(this);
    QStringList list;
    list << "1" << "2" << "3";
    model->setStringList(list); //为model设置数据
    ui->listView->setModel(model);//为界面绑定model
    ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);//设置触发编辑的操作
}

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

/**
 * @brief MainWindow::on_btnRecovery_clicked 恢复
 */
void MainWindow::on_btnRecovery_clicked()
{
    QStringList list;
    list << "1" << "2" << "3";
    model->setStringList(list);
}

/**
 * @brief MainWindow::on_listView_clicked 选择之后,为状态栏赋值
 * @param index
 */
void MainWindow::on_listView_clicked(const QModelIndex &index)
{
    QString str  = QString("第 %1 行,第 %2 列").arg(index.row() + 1).arg(index.column() + 1);
    ui->statusbar->showMessage(str);
}

/**
 * @brief MainWindow::on_btnClearText_clicked 文本框清空
 */
void MainWindow::on_btnClearText_clicked()
{
    ui->plainTextEdit->clear();
}

/**
 * @brief MainWindow::on_btnShowModel_clicked 显示消息模型中的QStringList
 */
void MainWindow::on_btnShowModel_clicked()
{
    ui->plainTextEdit->clear();
    foreach (QString item, model->stringList()) {
        ui->plainTextEdit->appendPlainText(item);
    }
}

/**
 * @brief MainWindow::on_btnAdd_clicked 最后一行添加
 */
void MainWindow::on_btnAdd_clicked()
{
    model->insertRow(model->rowCount());
    QModelIndex index = model->index(model->rowCount() - 1, 0);
    model->setData(index, "new item", Qt::DisplayRole);
    ui->listView->setCurrentIndex(index);
    QString str  = QString("第 %1 行,第 %2 列").arg(index.row() + 1).arg(index.column() + 1);
    ui->statusbar->showMessage(str);
}

/**
 * @brief MainWindow::on_btnInsert_clicked 指定行插入
 */
void MainWindow::on_btnInsert_clicked()
{
    QModelIndex index = ui->listView->currentIndex();
    model->insertRow(index.row());
    model->setData(index, "new item", Qt::DisplayRole);
}

/**
 * @brief MainWindow::on_btnDel_clicked 删除一行
 */
void MainWindow::on_btnDel_clicked()
{
    QModelIndex index = ui->listView->currentIndex();
    model->removeRow(index.row());
}

/**
 * @brief MainWindow::on_btnClear_clicked 清空model
 */
void MainWindow::on_btnClear_clicked()
{
    model->removeRows(0, model->rowCount());
}

界面

posted @ 2022-04-19 17:41  echo_lovely  阅读(399)  评论(0编辑  收藏  举报