je dérivé le code suivant:Qt/C++ - Appel de la méthode surchargée de la classe
void AppMPhase::closeEvent(QCloseEvent *closeEvent) {
QMessageBox* dialog = new QMessageBox(this);
dialog->setText("Warning: Initial configuration changed\nDo you want to restore it ?");
dialog->setIcon(QMessageBox::Warning);
dialog->addButton(QMessageBox::Yes);
dialog->addButton(QMessageBox::No);
connect(dialog, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(restoreInitialConfig(QAbstractButton*)));
dialog->exec();
}
void AppMPhase::restoreInitialConfig(QAbstractButton *button) {
if(!button->text().compare(QString("Yes"))) {
// restore Config
}
else {
// don't restore
}
MainWindow::closeEvent(closeEvent);
}
avec AppMPhase la classe dérivée de MainWindow
Je voudrais appeler la méthode closeEvent de la classe de base MainWindow dans la méthode "restoreInitialConfig", pour fermer la fenêtre après avoir restauré la configuration. Est-ce possible? c'est différent des autres questions que j'ai vues car la méthode closeEvent est surchargée dans la classe AppMPhase.
la classe AppMPhase:
class AppMPhase : public QtUi::MainWindow
{
Q_OBJECT
public:
AppMPhase(QWidget *const parent = Q_NULLPTR, const Qt::WindowFlags flags = 0);
~AppMPhase();
int readConfigFromExternFile(QString path);
int readCalibrationDate(QString path);
QSize sizeHint() const Q_DECL_OVERRIDE;
QtWrapperTestManager * testManager;
public Q_SLOTS:
void show();
public slots:
void currentTestFinished();
void createTest(unsigned int,QString);
void restoreInitialConfig(QAbstractButton* button);
signals:
void notifyPageTestCurrentTestFinished();
private:
enum AppPage
{
PAGE_START,
PAGE_ABOUT
};
bool isTestMangaerCreated;
std::map<QString, std::map<std::string, std::string> > conversion_Table_Cable_Ref_sensorParamMap;
Pages::GenericAppPage * appPage(const int index) const;
QToolButton * appPageButton(const int index) const;
virtual void closeEvent(QCloseEvent *closeEvent) Q_DECL_OVERRIDE;
La classe MainWindow:
class SHARED_EXPORT_LIB_QT_UI MainWindow : public QMainWindow
{
Q_OBJECT
signals:
void aboutToClose();
public slots:
virtual void show();
private slots:
void changeLanguage(const QString &language);
public:
MainWindow(QWidget *const parent = Q_NULLPTR, const Qt::WindowFlags flags = 0);
virtual ~MainWindow();
protected:
void showCopyright(const QString ©RightHeader);
void showLanguageSelector(const QStringList &languages);
void setupUi(const MainPageList &pageList);
void setupUi(QWidget *centerWidget = Q_NULLPTR);
virtual void closeEvent(QCloseEvent *closeEvent) Q_DECL_OVERRIDE;
const Ui::MainWindow *const _ui;
MainPageItemList _mainPageItemList;
};
Merci à l'avance.
Flo
Vous pourriez vouloir voir comment vous pourriez utiliser un équivalent de "super" en C++. Voir cette discographie pour plus d'informations. – Xatyrian
Vous n'avez pas à appeler la fonction 'closeEvent()' du tout. Lorsque vous héritez de la classe 'QMainWindow', vous pouvez simplement appeler son emplacement' close() 'pour le fermer. Ainsi, au lieu de 'MainWindow :: closeEvent (closeEvent);' dans votre code, appelez 'close();'. – vahancho
Notez que nous aimons un [MCVE], c'est-à-dire une version minimale de votre code qui reproduit votre problème. Cela rend votre question plus facile à répondre et plus utile pour les autres avec la même question. – m7913d