QTableView删除行,列

QTableView删除行,列
头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QStandardItemModel>
#include <QTableView>
#include <QMenu>
#include <QAction>
#include <QPoint>
#include <QMessageBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QStandardItemModel *model;
    QMenu *menu;
    QAction *act;//删除当前行
    QAction *actcol;//删除当前列
    int currentrow;
    int currentcol;
private slots:
    void rightclickslot(QPoint pos);//菜单点击,获取当前位置
    void deleteslotrow();//得知菜单当前的行位置并删除
    void deleteslotcol();//得知菜单当前的列位置并删除

private:
    Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H


cpp文件

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    model = new QStandardItemModel;
    QStringList slt;
    slt<<QString::fromUtf8("第一列")<<QString::fromUtf8("第二列")<<QString::fromUtf8("第三列");
    model->setHorizontalHeaderLabels(slt);
    ui->tableView->setModel(model);
    QList<QStandardItem *> qlist;
    qlist << new QStandardItem("q")<<new QStandardItem("w")<<new QStandardItem("e");
    model->appendRow(qlist);
    qlist.clear();
    qlist << new QStandardItem("qq")<<new QStandardItem("ww")<<new QStandardItem("ee");
    model->appendRow(qlist);
    qlist.clear();
    qlist << new QStandardItem("qqq")<<new QStandardItem("www")<<new QStandardItem("eee");
    model->appendRow(qlist);
    qlist.clear();

    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);//设置选择元素,以元素为单位
    ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);//设置选择模式,

//    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选择行行为,以行为单位
//    ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);//设置选择模式,选择单行

    //ui->tableView->setSelectionBehavior(QAbstractItemView::SelectColumns);//设置选择列行为,以列为单位
    //ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);//设置选择模式,选择单列

    ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);//右键点击菜单
    menu = new QMenu(ui->tableView);
    act = new QAction("删除当前行",this);
    actcol = new QAction("删除当前列",this);
    menu->addAction(act);
    menu->addAction(actcol);

    connect(ui->tableView,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(rightclickslot(QPoint)));
    connect(act,SIGNAL(triggered(bool)),this,SLOT(deleteslotrow()));
    connect(actcol,SIGNAL(triggered(bool)),this,SLOT(deleteslotcol()));


}

void MainWindow::rightclickslot(QPoint pos)
{
    QModelIndex index = ui->tableView->indexAt(pos);
    currentrow = index.row();
    currentcol = index.column();
    qDebug()<<"index.data()"<<index.data().toString();
    qDebug()<<"model->data(index)"<<model->data(index).toString();
    qDebug()<<"currentrow"<<currentrow;
    qDebug()<<"currentcol"<<currentcol;
    if(index.isValid())
        menu->exec(QCursor::pos());
}
void MainWindow::deleteslotrow()
{
    QMessageBox message(QMessageBox::NoIcon,QString::fromUtf8("提示"),QString::fromUtf8("是否删除本行数据"),
                        QMessageBox::Yes | QMessageBox::No,NULL);
    //如确认删除
    if(message.exec() == QMessageBox::Yes)
    {
        model->removeRow(currentrow);
    }
}
void MainWindow::deleteslotcol()
{
    QMessageBox message(QMessageBox::NoIcon,QString::fromUtf8("提示"),QString::fromUtf8("是否删除本列数据"),
                        QMessageBox::Yes | QMessageBox::No,NULL);
    //如确认删除
    if(message.exec() == QMessageBox::Yes)
    {
        QMessageBox::information(NULL,QString::fromUtf8("提示"),QString::fromUtf8("就不让你删"));
        //model->removeColumn(currentcol);
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值