J'ai essayé de trouver la réponse à celle-ci avec google mais rien n'a de fruit. Je suis en train de convertir une application de Qt4 en Qt5. Cette application compilée parfaitement dans Qt4 mais quand j'essaye de compiler contre Qt5 maintenant cela me donne cette erreur de permission. Comme le statut de cette classe est protégé dans les deux versions, j'ai du mal à comprendre ce que je dois changer.'virtual bool QAbstractScrollArea :: eventFilter (QObject *, QEvent *)' est protégé
Ce problème de compilation a été répliqué sur quelques installations Ubuntu différentes (y compris wsl) mais je n'ai pas encore essayé dans Fedora.
est ici un sous-ensemble de la classe
#include <QWidget>
#include <QEvent>
#include <QTableWidget>
#include <QItemDelegate>
#include <QModelIndex>
#include <QSize>
#include <qdialog.h>
#include <qcombobox.h>
#include "ui_pegs_page.h"
#include <string>
class EGS_ConfigReader;
class QProcess;
class PEGS_RunOutput;
class QTableWidget;
struct Element {
int Z;
std::string symbol;
float aw;
float Iev;
float rho;
};
const int n_element = 100;
extern Element element_data[];
class TableEventHandler : public QObject {
Q_OBJECT
public:
TableEventHandler(QTableWidget *parent);
protected:
bool eventFilter(QObject *o, QEvent *e);
private:
QStringList itemCopy;
QList<QTableWidgetSelectionRange> copyRange;
};
Edit:
est ici la méthode qui a des problèmes.
TableEventHandler::TableEventHandler(QTableWidget *parent) :
QObject(parent) {
if(parent == 0)
qFatal("TableEventHandler::TableEventHandler: parent can not be null!");
}
bool TableEventHandler::eventFilter(QObject *o, QEvent *e) {
if(!o) qWarning("TableEventHandler::eventFilter called with 0 object?");
if(QString(o->metaObject()->className()) != tr("QTableWidget")) {
#ifdef EI_DEBUG
qDebug("Only QTableWidget objects accepted! Returning!");
#endif
return false;
}
QTableWidget *to = (QTableWidget *)o;
if(e->type() == QEvent::KeyPress) {
QKeyEvent *ke = (QKeyEvent*)e;
if(ke->matches(QKeySequence::Copy)){
QString cellText; itemCopy.clear(); copyRange.clear();
QList<QTableWidgetSelectionRange> ts = to->selectedRanges();
if(!ts.isEmpty()) {
for (int irow = ts.first().topRow(); irow <= ts.first().bottomRow(); irow++){
for (int icol = ts.first().leftColumn(); icol <= ts.first().rightColumn(); icol++){
QTableWidgetItem *w = to->item(irow,icol);
if(w) cellText = w->text();
if (!cellText.isEmpty()){
itemCopy << cellText;
}
else
itemCopy << " ";
}
}
copyRange = ts;
//cout << itemCopy.join(", ").toLatin1().data() << endl;
}
else {
QTableWidgetItem *w = to->item(to->currentRow(), to->currentColumn());
if (w) cellText = w->text();
if (!cellText.isEmpty())
itemCopy << cellText;
else itemCopy << "";
}
return true;
}
else if(ke->matches(QKeySequence::Paste) && !itemCopy.isEmpty() && !copyRange.isEmpty()){
QList<QTableWidgetSelectionRange> cs = to->selectedRanges();
int top = cs.first().topRow(), left = cs.first().leftColumn(), icount = 0;
QTableWidgetSelectionRange ts = QTableWidgetSelectionRange(
top , left,
top + copyRange.first().rowCount()-1,
left + copyRange.first().columnCount()-1);
for (int irow = ts.topRow(); irow <= ts.bottomRow(); irow++){
for (int icol = ts.leftColumn(); icol <= ts.rightColumn(); icol++){
if (++icount <= itemCopy.size())
to->setItem(irow, icol, new QTableWidgetItem(itemCopy[icount-1]));
to->setItem(irow, icol, new QTableWidgetItem(itemCopy[icount-1]));
}
}
return true;
}
else if(ke->matches(QKeySequence::Cut)){
QString cellText; itemCopy.clear(); copyRange.clear();
QList<QTableWidgetSelectionRange> ts = to->selectedRanges();
if(!ts.isEmpty()) {
for (int irow = ts.first().topRow(); irow <= ts.first().bottomRow(); irow++) {
for(int icol = ts.first().leftColumn(); icol <= ts.first().rightColumn(); icol++) {
QTableWidgetItem *w = to->item(irow,icol);
if(w) cellText = w->text();
if (!cellText.isEmpty()){
itemCopy << cellText;
}
else
itemCopy << "";
to->setItem(irow,icol,0);
}
}
copyRange = ts;
//cout << itemCopy.join(", ").toLatin1().data() << endl;
}
return true;
}
else if(ke->matches(QKeySequence::Delete)){
QList<QTableWidgetSelectionRange> ts = to->selectedRanges();
if(!ts.isEmpty()) {
for (int irow = ts.first().topRow(); irow <= ts.first().bottomRow(); irow++) {
for(int icol = ts.first().leftColumn(); icol <= ts.first().rightColumn(); icol++) {
to->setItem(irow,icol,0);
}
}
}
return true;
}
else
to->eventFilter(o, e);
}
return false;
}
Je vois où vous allez avec cela et je vais explorer. Je me demande comment, s'il s'agit d'un problème d'héritage, cela n'est pas apparu dans qt4? – crcrewso