Как я могу удалить значение из ячейки в 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 линии, но если я нажимаю ОТМ сообщений не появляется
Хорошо, я думаю, я нашел ошибку, ваш eventfilter работает только с Griglia, который расположен в MainWindow, а не main.cpp, так что вы можете увидеть нормальный TableView но eventfilter не Работа. Ваш текущий код никогда не будет работать, вы должны делать все свои вещи внутри mainwindow. Я не хочу компилировать его на своем компьютере, потому что это большая работа, поэтому я напишу код, который работает в myBrain-компиляторе :) Я добавлю код через несколько минут – Chernobyl
Проверьте мои изменения, скажите в комментариях. – Chernobyl