Qt QtableWidget、QtableView表格删除选中行、删除单行、删除多行

这篇具有很好参考价值的文章主要介绍了Qt QtableWidget、QtableView表格删除选中行、删除单行、删除多行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt QtableWidget表格删除选中行

只能选择一行,点击按钮后,删除一行

设置

	QTableWidget *tb = ui->tableWidget;
    tb->setSelectionBehavior(QAbstractItemView::SelectRows);
    tb->setSelectionMode(QAbstractItemView::SingleSelection);

操作

    QTableWidget *tb = ui->tableWidget;
    int curRow=tb->currentRow();     //当前行号
    tb->removeRow(curRow);           //删除当前行及其items

可以选择中多行,点击按钮后,删除多行

设置

    QTableWidget *tb = ui->tableWidget;
    tb->setSelectionBehavior(QAbstractItemView::SelectRows);
    tb->setSelectionMode(QAbstractItemView::ExtendedSelection);

操作

	QTableWidget *tb = ui->tableWidget;
    QItemSelectionModel  *m_selection = tb->selectionModel();
    QModelIndexList indexList = m_selection->selectedIndexes();
    QList<int> list;
    int prev =-1,curr=-1;
    if(indexList.length()>1){
		//预处理第一行
        prev  = indexList.at(0).row();
        list.append(prev);

        for(int i=1;i<indexList.length();i++){
            //qDebug() <<"row: "<< indexList.at(i).row() <<"column: "<<indexList.at(i).column();
            curr = indexList.at(i).row();
            if(prev ==curr){
                continue;
            }else{
                prev = curr;
                list.append(prev);
            }
        }
    }else if(indexList.length()==1){
        list.append(indexList.at(0).row());
    }else{
        return;
    }
    //从大到小排序,必须从最后一行  往前删除  不然会打乱顺序
    std::sort(list.rbegin(),list.rend());
    //根据填充到的数据 删除选中列
    for(int j = 0; j <list.size(); j++)
    {
        int cc = list.at(j);
        tb->removeRow(cc);           //删除当前行及其items
    }

选中某一列中的不同行,点击按钮后,删除多行

无需设置setSelectionBehavior(QAbstractItemView::SelectRows),但是可以选择的那一列最好设置为不可编辑。按下Ctrl键,选择多行。

设置1

    tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);//选择模式
    m_selection = new QItemSelectionModel(m_model,this);           //创建选择模型
    tableView->setSelectionModel(m_selection); //设置选择模型

设置2

        QStandardItem *item1 = new QStandardItem("aa1");
        item1->setEditable(false);
        QStandardItem *item2 = new QStandardItem("aa2");
        item2->setEditable(false);        
        QList<QStandardItem *> list = {item1,item2};
		model->appendRow(list);        

操作

            QModelIndexList indexList = m_selection->selectedIndexes();
            QList<int> list;
            int sameColumn=-1;
            for(int i=0;i<indexList.length();i++){
                if(i==0){sameColumn=indexList.at(i).column();}
                //qDebug() <<"row: "<< indexList.at(i).row() <<"column: "<<indexList.at(i).column();
                if(sameColumn!=indexList.at(i).column()){
                    //上面currentColumnChanged信号其实已经让用户只能选择同一列,这里双重保险
                    qDebug()<<"你的选择有不同列,请务必选择同一列的不同行来进行多行删除操作";
                    return;
                }
                list.append(indexList.at(i).row());
            }
            //从大到小排序,必须从最后一行  往前删除  不然会打乱顺序
            std::sort(list.rbegin(),list.rend());
            //根据填充到的数据 删除选中列
            for(int j = 0; j <list.size(); j++)
            {
                int cc = list.at(j);
                m_model->removeRow(cc);
            }

QTableWidgetSelectionRange介绍

QTableWidgetSelectionRange是Qt框架中用于表示QTableWidget中选定的一块单元格区域的类。以下是如何使用QTableWidgetSelectionRange的一些常见操作:

  1. 获取当前选定的单元格区域:
QList<QTableWidgetSelectionRange> ranges = tableWidget->selectedRanges();
  1. 获取第一个选定的单元格区域的起始行、起始列、行数和列数:
if (!ranges.isEmpty()) {
    int startRow = ranges.first().topRow();
    int startColumn = ranges.first().leftColumn();
    int rowCount = ranges.first().rowCount();
    int columnCount = ranges.first().columnCount();
}
  1. 遍历所有选定的单元格区域:
foreach (const QTableWidgetSelectionRange &range, ranges) {
    int startRow = range.topRow();
    int startColumn = range.leftColumn();
    int rowCount = range.rowCount();
    int columnCount = range.columnCount();
    // 进行处理...
}
  1. 检查特定的单元格区域是否被选定:
QTableWidgetSelectionRange range(1, 1, 3, 3); // 定义一个起始行为1,起始列为1,行数和列数为3的区域
if (tableWidget->selectedRanges().contains(range)) {
    // 区域被选定
}
  1. 清除所有选定的单元格区域:
tableWidget->clearSelection();

QTableWidgetSelectionRange类提供了一种方便的方式来处理QTableWidget中的选择区域。使用它可以获取和操作选定的单元格区域,进行相关的处理和操作。

QTableWidget的选择模式

QTableWidget通过setSelectionMode()SelectionBehavior来设置选择模式

enum QAbstractItemView::SelectionBehavior

Constant Value Description
QAbstractItemView::SelectItems 0 Selecting single items.
QAbstractItemView::SelectRows 1 Selecting only rows.
QAbstractItemView::SelectColumns 2 Selecting only columns.

enum QAbstractItemView::SelectionMode

此枚举指示视图如何响应用户选择:文章来源地址https://www.toymoban.com/news/detail-789956.html

Constant Value Description
QAbstractItemView::SingleSelection 1 When the user selects an item, any already-selected item becomes unselected. It is possible for the user to deselect the selected item by pressing the Ctrl key when clicking the selected item.
QAbstractItemView::ContiguousSelection 4 When the user selects an item in the usual way, the selection is cleared and the new item selected. However, if the user presses the Shift key while clicking on an item, all items between the current item and the clicked item are selected or unselected, depending on the state of the clicked item.
QAbstractItemView::ExtendedSelection 3 When the user selects an item in the usual way, the selection is cleared and the new item selected. However, if the user presses the Ctrl key when clicking on an item, the clicked item gets toggled and all other items are left untouched. If the user presses the Shift key while clicking on an item, all items between the current item and the clicked item are selected or unselected, depending on the state of the clicked item. Multiple items can be selected by dragging the mouse over them.
QAbstractItemView::MultiSelection 2 When the user selects an item in the usual way, the selection status of that item is toggled and the other items are left alone. Multiple items can be toggled by dragging the mouse over them.
QAbstractItemView::NoSelection 0 Items cannot be selected.

到了这里,关于Qt QtableWidget、QtableView表格删除选中行、删除单行、删除多行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt QTableView 实现数据改变表格自动刷新

    这里提供一份简单的代码示例,实现QTableView实时刷新数据: 在代码中,我们首先创建一个QStandardItemModel数据模型,并设置表格的行数和列数,同时设置表头和填充数据。然后将数据模型绑定到QTableView中,并实现数据变化自动刷新的功能。最后显示QWidget窗口。 在实际开发中

    2024年02月13日
    浏览(43)
  • QT实例2(QTableWidget表格中增删数据)

    本案例仅简单介绍QTableWidget部分使用方法,如在表格中插入或删除一行数据以及清空表格数据等。在添加数据时,设置了条件判断如正则表达式,若用户输入的数据不合法,则添加失败并提示用户错误的地方,便于用户修改。 如上图所示,使用QWidget类创建并设置UI界面,其中

    2024年02月01日
    浏览(34)
  • Qt QTableWidget 表格自适应 高度和宽度

    1. 在MainWindow中设置 1.1. 对被嵌入的子窗口进行设置,去除子窗口的一些影响到嵌入的部件。 pTable:指向子窗口堆内存的指针 1.2. 设置子窗口可以跟随主窗口自适应变化宽度。 水平方向:子窗口的自适应缩放。也可以直接在设计师中完成。 2. 在QTableWidget ui表格的 cpp文件中设

    2023年04月21日
    浏览(79)
  • Qt QTableWidget表格控件的用法(非常详细)

    QTableWidget 是 Qt 提供的一种表格控件(如图 1 所示),类似于我们经常使用的 Excel 表格,可以将数据以表格的方式展示给用户。 整个 QTableWidget 表格可以分为 3 个区域: 区域 ① 和 ② 都是表头,区域 ① 设置每一行的表头,区域 ② 设置每一列的表头。我们可以自定义两个区

    2024年01月20日
    浏览(38)
  • 让QT中的Qtablewidget控件表格中的元素内容显示居中

    好了看最终的一个演示出来的效果吧  好了,就到这里,下次其他的我再继续更新吧,下面我附上一个类似的文章,写的也可以,有些我没有用到的分享出来你们也可以借鉴一下。 Qt中让tableWidget内容中的每个元素居中(qtablewidget的一些使用) - ww学习笔记 - 博客园

    2024年02月11日
    浏览(45)
  • 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget(1) QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 QTableWidget 有很多属性和方法,完整的可查看帮助文档。 在窗口上放置一个 QTableWidget 控件后,既可以在设计师 UI 界面来编辑属性和添加数据,也

    2024年02月12日
    浏览(49)
  • 基于Qt数据库项目实现(Sqlite3为例)|考查数据库、表格(QTableView 显示)(进阶)

    01 数据库表格(QTableView 显示) 本小节设计一个生活中的例子,使用数据库修改/查询员工的编号、姓名、年龄、性别与照片信息。 本例将数据库的内容显示到 QTableView 上。如果只是简单的显示数据库的内容到QTableView 上,可以使用下面的方法,此方法 QTableView 上可以看到

    2024年02月20日
    浏览(46)
  • el-table多选表格 实现默认选中 删除选中列表取消勾选等联动效果

    实现效果如下: 代码如下:

    2024年02月08日
    浏览(47)
  • QTableView设置样式表/选中行颜色, QTableView美化

    QTableView设置QSS样式表   Qt基础使用 说明:笔记为代码修改方式,value:代表值,tableWidget替代ui-tabelwidget[控件名称] #include QTableWidget 创建一个tablewidget QTableWidget *tabelWidget = new QTableWidget ; 设置行数 tableWidget-setRowCount(value); 设置列数 tableWidget-setColumnCount(value); QTableWidget设置表头

    2024年02月04日
    浏览(36)
  • css超出显示...(单行、多行)

    效果图: 注:必须要定一个宽度。 效果图: 注:必须要定一个宽度。 以上代码就能实现上面的效果

    2024年01月20日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包