QT6(QStringListModel和QListView)

发布于:2025-08-29 ⋅ 阅读:(20) ⋅ 点赞:(0)

QT6


QStringListModel和QListView

QStringListModel是处理字符串列表的模型类,其实例可以作为QListView组件的数据模型,这两个类结合,构成模型/视图结构,可以在界面上显示和编辑字符串列表

常用属性和方法

常用属性

属性名称 类型 描述
batchSize int layoutMode 设置为 Batched 时,控制每批布局的项目数量
flow QListView::Flow 项目布局方向(LeftToRightTopToBottom
gridSize QSize 布局项目时使用的网格大小
isWrapping bool 指示项目布局是否应换行
itemAlignment Qt::Alignment 项目中每个单元格的对齐方式
layoutMode QListView::LayoutMode 项目布局模式(SinglePassBatched
modelColumn int 模型中可见的列
movement QListView::Movement 项目移动方式(Static, Free, Snap
resizeMode QListView::ResizeMode 调整视图大小时的行为(FixedAdjust
spacing int 布局中项目周围的空间大小
uniformItemSizes bool 指示所有项目是否具有相同的大小
viewMode QListView::ViewMode 视图显示模式(ListModeIconMode
wordWrap bool 指示项目文本是否应在单词边界处换行
selectionRectVisible bool 选择矩形是否可见
alternatingRowColors bool 是否启用交替行颜色

常用方法

方法名称 返回类型 描述
setModel(QAbstractItemModel *model) void 设置视图要显示的模型
setRootIndex(const QModelIndex &index) void 设置模型的根索引
setSelectionModel(QItemSelectionModel *selectionModel) void 设置视图的选择模型
indexAt(const QPoint &p) const QModelIndex 返回位于给定点处的项目模型索引
scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) void 滚动视图以使模型索引可见
visualRect(const QModelIndex &index) const QRect 返回索引对应项的可视矩形区域
setRowHidden(int row, bool hide) void 设置指定行是隐藏还是显示
isRowHidden(int row) const bool 返回指定行是否已隐藏
clearPropertyFlags() void 清除设置的 ViewMode 属性标志

常用信号

信号名称 描述
clicked(const QModelIndex &index) 鼠标在项目上点击时发出
doubleClicked(const QModelIndex &index) 鼠标在项目上双击时发出
activated(const QModelIndex &index) 用户激活项目时发出
entered(const QModelIndex &index) 鼠标光标进入项目时发出
pressed(const QModelIndex &index) 鼠标在项目上按下时发出
indexesMoved(const QModelIndexList &indexes) 指定索引在视图中移动时发出

代码测试

#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QStringListModel>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_strList << "北京" << "上海" << "南昌" << "南京" << "成都";

    m_model = new QStringListModel(this);
    // 和数据进行关联
    m_model->setStringList(m_strList);
    // 给ListView设置模型
    ui->listView->setModel(m_model);
    ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);
}

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

void MainWindow::on_btnRecoveryList_clicked()
{
    m_model->setStringList(m_strList);

}


void MainWindow::on_btnClearList_clicked()
{
    m_model->removeRows(0,m_model->rowCount());
}


void MainWindow::on_checkBox_clicked(bool checked)
{
    if(checked){
        ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);
    }else{
        ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    }
}


void MainWindow::on_btnAddItem_clicked()
{
    m_model->insertRow(m_model->rowCount());
    QModelIndex index = m_model->index(m_model->rowCount() - 1);
    m_model->setData(index,"new item",Qt::DisplayRole);

    ui->listView->setCurrentIndex(index);

}


void MainWindow::on_btnInsterItem_clicked()
{
    QModelIndex index = ui->listView->currentIndex();
    m_model->insertRow(index.row());
    m_model->setData(index,"ins item",Qt::DisplayRole);

    ui->listView->setCurrentIndex(index);
}


void MainWindow::on_btndelItem_clicked()
{
    QModelIndex index = ui->listView->currentIndex();
    m_model->removeRow(index.row());

    ui->listView->setCurrentIndex(index);
}


void MainWindow::on_btnUpMove_clicked()
{
    QModelIndex index;
    int curRow = ui->listView->currentIndex().row();
    m_model->moveRow(index,curRow,index,curRow-1 );
}


void MainWindow::on_btnDownMove_clicked()
{
    QModelIndex index;
    int curRow = ui->listView->currentIndex().row();
    m_model->moveRow(index,curRow,index,curRow+2 );
}


void MainWindow::on_btnSort_clicked(bool checked)
{
    if(checked){
        m_model->sort(0,Qt::AscendingOrder);
    }else{
        m_model->sort(0,Qt::DescendingOrder);
    }
}


void MainWindow::on_btnClearText_clicked()
{
    ui->plainTextEdit->clear();
}


void MainWindow::on_btnDisplayList_clicked()
{
    ui->plainTextEdit->clear();
    QStringList tempList = m_model->stringList();
    for(int i = 0 ; i < tempList.size() ; i++){
        ui->plainTextEdit->appendPlainText(tempList.at(i));
    }
}


void MainWindow::on_listView_clicked(const QModelIndex &index)
{
    QString str = QString::asprintf("模型索引:row=%d,colum=%d",index.row(),index.row());
    str+=m_model->data(index,Qt::DisplayRole).toString();
    ui->statusbar->showMessage(str);
}


效果展示

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到