2016-04-12 4 views
0

J'essaye de créer un projet dans lequel j'ai une classe progressbarV qui crée un QProgressBar. J'appelle cette classe dans ma fenêtre principale. Mon but est de naviguer vers un autre écran lorsque je clique sur la barre de progression. J'ai essayé d'implémenter KeyRleaseEvent dans ce but, mais peu importe ce que je fais, je reçois toujours l'erreur "QObject :: connect: Pas de signal progressbarV :: keyReleaseEvent()". J'apprécierais beaucoup toute aide que je pourrais obtenir pour résoudre ce problème.QObject :: connect: Pas de signal progressbarV :: keyReleaseEvent()

Please find my code below:- 

mainwindow.h 
    #ifndef MAINWINDOW_H 
    #define MAINWINDOW_H 

    #include <QMainWindow> 
    #include <QWidget> 
    #include <QProgressBar> 
    #include <QLabel> 
    #include <QPixmap> 
    #include <QPushButton> 
    #include <QtWidgets> 
    #include <QProcess> 

    #include "headerfiles/progressbarV.h" 
    #include "headerfiles/redzonesettingsscreen.h" 

    class progressbarH; 

    class redZoneSettingsScreen; 

    class MainWindow : public QMainWindow//,public QProcess 
    { 
     Q_OBJECT 

    private: 
     progressbarV *progressbar_V_left; 

    public: 
     MainWindow(); 
     ~MainWindow(); 

     void GetObjects(redZoneSettingsScreen *); 

    private slots: 
     void handleSettingsButtonPressed(); 

    /*protected: 
     virtual void keyReleaseEvent(QKeyEvent *); //Q_DECL_OVERRIDE;*/ 
    }; 

    #endif // MAINWINDOW_H 

mainwindow.cpp 

    #include "headerfiles/mainwindow.h" 

    redZoneSettingsScreen *gotoSettingsScreen; 

    MainWindow::MainWindow() 
    { 
     progressbar_V_left = new progressbarV; 
     progressbar_V_left->setParent(this); 
     progressbar_V_left->setGeometry(350,200,90,450); 
     progressbar_V_left->setTitle("Height"); 
     progressbar_V_left->setData(labelCurHeight->getDataValue()); 
     progressbar_V_left->setMinVal(0); 
     progressbar_V_left->setMaxVal(labelMaxHeight->getDataValue()); 
     connect(progressbar_V_left, SIGNAL (keyReleaseEvent()), this, SLOT 
      (handleSettingsButtonPressed())); 
    } 

    MainWindow::~MainWindow() 
    { 
     delete progressbar_V_left; 
    } 

    void MainWindow::GetObjects(redZoneSettingsScreen *button) 
    { 
     gotoSettingsScreen = button; 
    } 

    void MainWindow::handleSettingsButtonPressed() 
    { 
     gotoSettingsScreen->hide(); 
     gotoSettingsScreen->show(); 
     this->hide(); 
    } 

    /*void MainWindow::keyReleaseEvent(QKeyEvent *event) 
    { 

    }*/ 

progressbarV.h 

    #ifndef PROGRESSBARV_H 
    #define PROGRESSBARV_H 

    #include <QWidget> 
    #include <QProgressBar> 
    #include <QLabel> 
    #include <QPixmap> 

    class progressbarV: public QWidget 
    { 
     Q_OBJECT 

    private: 
     QProgressBar *progressbar_V; 
     QLabel *labelRedDanger, *labelYellowWarning; 
     float maxScaledHeight, redZoneScaledHeight, yellowZoneScaledHeight; 

     int spn, spn_value; 
     QString title; 
     int data; 
     short minVal; 
     short maxVal; 

    public: 
     progressbarV(); 
     ~progressbarV(); 

     void setSPN(int); 
     int getSPN(); 

     void setSPN_Value(int); 
     int getSPN_Value(); 

     void setTitle(QString); 
     QString getTitle(); 

     void setData(int); 
     int getData(); 

     void setMinVal(short); 
     short getMinVal(); 

     void setMaxVal(short); 
     short getMaxVal(); 

     /*void setLowError(short); 
     short getLowError(); 

     void setLowWarning(short); 
     short getLowWarning(); 

     void setHighError(short); 
     short getHighError(); 

     void setHighWarning(short); 
     short getHighWarning();*/ 

     QProgressBar* getProgressBarV(); 

    protected: 
     void keyReleaseEvent(QKeyEvent *); //Q_DECL_OVERRIDE; 

    }; 
    #endif // PROGRESSBARH_H 

progressbarV.cpp 

    #include "headerfiles/progressbarV.h" 

    progressbarV::progressbarV() 
    { 
     progressbar_V = new QProgressBar; 
     progressbar_V->setParent(this); 
     progressbar_V->setStyleSheet("QProgressBar{ border: solid grey; border- 
      width: 6; border-radius: 12; text-align: center;},  
     QProgressBar::chunk{background-color: limegreen; width: 0px; margin: 
      0px;}"); 
     progressbar_V->setGeometry(2,0,50,200); 
     progressbar_V->setOrientation(Qt::Vertical); 

     maxScaledHeight = (200*100)/120; 
     redZoneScaledHeight = 200 - ((maxScaledHeight*105)/100); 
     yellowZoneScaledHeight = 200 - ((maxScaledHeight*90)/100); 

     QPixmap mypixRed(":/images/images/redZone.png"); 
     labelRedDanger = new QLabel; 
     labelRedDanger->setParent(this); 
     labelRedDanger->setGeometry(8,redZoneScaledHeight,38,3); 
     labelRedDanger->setPixmap(mypixRed); 

     QPixmap mypixYellow(":/images/images/yellowZone.png"); 
     labelYellowWarning = new QLabel; 
     labelYellowWarning->setParent(this); 
     labelYellowWarning->setGeometry(8,yellowZoneScaledHeight,38,3); 
     labelYellowWarning->setPixmap(mypixYellow); 
    } 

    progressbarV::~progressbarV() 
    { 
     delete progressbar_V; 
     delete labelRedDanger; 
     delete labelYellowWarning; 
    } 

    void progressbarV::setSPN(int val) 
    { 
     spn = val; 
    } 

    int progressbarV::getSPN() 
    { 
     return spn; 
    } 

    void progressbarV::setSPN_Value(int val) 
    { 
     spn_value = val; 
    } 

    int progressbarV::getSPN_Value() 
    { 
     return spn_value; 
    } 

    void progressbarV::setTitle(QString mTitle) 
    { 
     title = mTitle; 
    } 

    QString progressbarV::getTitle() 
    { 
     return title; 
    } 

    void progressbarV::setData(int mData) 
    { 
     data = mData; 
     progressbar_V->setValue(data); 
    } 

    int progressbarV::getData() 
    { 
     return data; 
    } 

    void progressbarV::setMinVal(short mMinVal) 
    { 
     minVal = mMinVal; 
     progressbar_V->setMinimum(minVal); 
    } 

    short progressbarV::getMinVal() 
    { 
     return minVal; 
    } 

    void progressbarV::setMaxVal(short mMaxVal) 
    { 
     maxVal = mMaxVal; 
     progressbar_V->setMaximum(maxVal); 
    } 

    short progressbarV::getMaxVal() 
    { 
     return maxVal; 
    } 

    QProgressBar *progressbarV::getProgressBarV() 
    { 
     return progressbar_V; 
    } 

    void progressbarV::keyReleaseEvent(QKeyEvent *event) 
    { 

    } 

Since I am new to QT, kindly give me solutions in the form of code snippets 

Thanks in advance, 
Sam 
+0

La commande de connexion prend uniquement les signaux en tant que paramètres. keyReleaseEvent n'est pas un signal. –

+0

Comment vais-je créer un signal? – Sam

+0

Vous pouvez créer une fonction qui gère keyReleaseEvent, dans cette fonction, appelez votre propre signal. Recherchez un exemple de code pour définir un signal. –

Répondre

0

vous devez déclarer keyReleaseEvent comme SLOT publique

public slots: 
    void keyReleaseEvent(QKeyEvent *); //Q_DECL_OVERRIDE; 

de telle sorte que l'intervalle QT peut se connecter à l'aide de l'ancien style de connexion.