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;
}