QLabel click event using Qt?

后端 未结 3 1116
无人共我
无人共我 2021-01-12 11:01

I\'m new in Qt and have a question.

I have QLabel and QLineEdit objects, and when QLabel text is clicked on, I want to set thi

3条回答
  •  渐次进展
    2021-01-12 11:35

    You need to create one Custom Label class, which will inherit QLabel. Then you can use MouseButtonRelease event to check clicking of Label and emit your custom signal and catch in one SLOT.

    Your .h file will be as below:

    class YourLabelClass : public QLabel{
    
    signals:
        void myLabelClicked();       // Signal to emit 
    
    public slots:
        void slotLabelClicked();    // Slot which will consume signal 
    
    protected:
        bool event(QEvent *myEvent); // This method will give all kind of events on Label Widget    
    };
    

    In your .cpp file, your constructor will connect signal & slot as below :

    YourLabelClass :: YourLabelClass(QWidget* parent) : QLabel(parent) {
       connect(this, SIGNAL(myLabelClicked()), this, SLOT(slotLabelClicked()));
    }
    

    Remaining event method and SLOT method will be implemented as below:

    bool YourLabelClass :: event(QEvent *myEvent)  
    {
        switch(myEvent->type())
        {        
            case(QEvent :: MouseButtonRelease):   // Identify Mouse press Event
            {
                qDebug() << "Got Mouse Event";
                emit myLabelClicked();
                break;
            }
        }
        return QWidget::event(myEvent);
    }
    
    void YourLabelClass  :: slotLabelClicked()   // Implementation of Slot which will consume signal
    {
        qDebug() << "Clicked Label";
    }
    

    For Changing a Text on QLineEdit, you need to create a Custom Class and share object pointer with custom QLabel Class. Please check test code at this link

提交回复
热议问题