如何從QTableView
中的單元格中刪除值? 我創建了一個QTableView
但如果我按下所選單元格上的鍵盤的取消按鈕,則不會發生任何事情。 如果我想刪除該值,我必須雙擊該單元格並按取消,但是我想要刪除該值而無需雙擊,只需選擇該單元格並按下Canc
即可。取消QTableView中的單元格值
是keyEvent->key()
有用嗎?
@Chernobyl
MAINWINDOW.H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QKeyEvent>
#include <QTableView>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0) ;
~MainWindow();
QTableView *griglia;
protected:
bool eventFilter(QObject *obj, QEvent *event);
private:
Ui::MainWindow *ui;
};
#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);
qApp->installEventFilter(this);
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(obj == griglia && event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Cancel)
{
QModelIndex in =griglia->currentIndex();
griglia->model()->setData(in," ");
}
}
return QObject::eventFilter(obj, event);
}
MainWindow::~MainWindow()
{
delete ui;
}
MAIN.CPP
#include "mainwindow.h"
#include "itemdelegate.h"
#include "mymodel.h"
#include <QApplication>
#include <QtGui>
#include <QtCore>
#include <QtWidgets>
#include <QFile>
#include <QString>
#include <QTextStream>
#include <QIdentityProxyModel>
#include <QRegExpValidator>
#define GRIGLIA_RX "^[F0-9]|1[0-9]|2[0-4]$"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFile styleFile("style.qss");
styleFile.open(QFile::ReadOnly);
QString style(styleFile.readAll());
a.setStyleSheet(style);
QWidget *mainWindow = new QWidget;
QStandardItemModel *model = new QStandardItemModel(48,33);
QTableView *griglia = new QTableView;
griglia->setModel(model);
QPushButton *calcola = new QPushButton;
calcola->setText("CALCOLA");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(griglia);
layout->addWidget(calcola);
mainWindow->setLayout(layout);
ItemDelegate *itDelegate = new ItemDelegate;
griglia->setItemDelegate(itDelegate);
mainWindow->showMaximized();
return a.exec();
}
我加QDebug線,但如果我按CANC不會出現任何消息
好吧,我想我發現了錯誤,你eventfilter只能與位於主窗口,不main.cpp中griglia,所以你可以看到正常的tableview但eventfilter不工作。你現在的代碼永遠不會工作,你應該在mainwindow中做所有的事情。我不想在我的電腦上編譯它,因爲它有很多工作,所以我會編寫代碼在myBrain編譯器中工作:)幾分鐘後我將添加代碼 – Chernobyl 2014-10-30 18:13:59
檢查我的編輯,在評論結果中告訴。 – Chernobyl 2014-10-30 18:20:20