2016-04-12 10 views
0

Ich versuche ein Projekt zu erstellen, in dem ich eine Klasse progressbarV habe, die eine QProgressBar erzeugt. Ich rufe diese Klasse in meinem Hauptfenster an. Mein Ziel ist es, zu einem anderen Bildschirm zu navigieren, wenn ich auf den Fortschrittsbalken klicke. Ich habe versucht, KeyReleaseEvent für diesen Zweck zu implementieren, aber egal was ich mache, bekomme ich immer den Fehler "QObject :: connect: Kein solches Signal progressbarV :: keyReleaseEvent()". Ich wäre sehr dankbar für jede Hilfe, die ich bekommen könnte, um dieses Problem zu lösen.QObject :: connect: Kein solches 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

Der Befehl connect empfängt nur Signale als Parameter. keyReleaseEvent ist kein Signal. –

+0

Wie erstelle ich ein Signal? – Sam

+0

Sie können eine Funktion erstellen, die das keyReleaseEvent behandelt, in dieser Funktion rufen Sie Ihr eigenes Signal auf. Nachschlagen Beispielcode zum Definieren eines Signals. –

Antwort

0

benötigen Sie keyReleaseEvent als öffentlichen SCHLITZ

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

zu erklären, so dass QT, um es mit dem alten Verbindungs ​​Stil verbinden kann.