leave event auf StackedWidget

Alles rund um die Programmierung mit Qt
Antworten
Benj
Beiträge: 9
Registriert: 14. April 2017 10:52

leave event auf StackedWidget

Beitrag von Benj »

Hallo zusammen!

Ich bin neu in Qt und suche nun eine Lösung für folgendes Problem... Dazu erst einmal mein Code:

Code: Alles auswählen

void QWidget::leaveEvent(QEvent *event){

    QPoint position = this->mapToGlobal(this->pos());
    int x = position.x(); int y=position.y();
    this->cursor().setPos((x/2)+175, (y/2)+175);
    std::cout<<x<<" ,"<<y<<std::endl;

}
Funktioniert im Prinzip so wie ich es möchte. NUR, wie wende ich das Leave Event auf ein bestimmtes StackedWidget an bzw. so, dass der Code nur im Falle das dessen CurrentIndex gesetzt ist, ausgeführt wird?
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: leave event auf StackedWidget

Beitrag von veeman »

Du kannst zum Beispiel eine eventFilter fuer alle moeglichen Widgets installieren und in diesem auf dein gewuenschtes leaveEvent lauschen sowie eine Abfrag einfuegen ob fuer das Widget der Code ausgefuert werden soll.
Benj
Beiträge: 9
Registriert: 14. April 2017 10:52

Re: leave event auf StackedWidget

Beitrag von Benj »

@veeman, Danke dir vielmals! Funktioniert auf Anhieb (EventFilter), war genau was ich gebraucht habe und werde das auch direkt für meinen nächst geplanten Schritt verwenden können.

MfG
Benj
Beiträge: 9
Registriert: 14. April 2017 10:52

Re: leave event auf StackedWidget

Beitrag von Benj »

nach dem Versuch in der selben Methode auf ein KeyEvent (control Taste) zu prüfen um darauf hin den StackedWidget index auf 0 zurückzusetzen, bekomme ich folgende Fehlermeldung:
Fehler: no matching function for call to 'QKeyEvent::QKeyEvent(QEvent*&)'
QKeyEvent key = static_cast<QKeyEvent>(ev);

Code: Alles auswählen

bool MainWindow::eventFilter(QObject *obj, QEvent *ev){
    if((obj == ui->stackedWidget) && (ui->stackedWidget->currentIndex() == 1)){
        if(ev->type() == QEvent::KeyPress)
        {
            QKeyEvent key = static_cast<QKeyEvent>(ev);
            if(key.key() == Qt::Key_Control){
                ui->stackedWidget->setCurrentIndex(0);
            }

        }
        else{
            QPoint position = this->mapToGlobal(this->pos());
            int x = position.x(); int y=position.y();
            this->cursor().setPos((x/2)+175, (y/2)+175);
        }

        return true;
    }

}


Hat jemand ne Idee??
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: leave event auf StackedWidget

Beitrag von veeman »

Du musst es in einen Pointer Type casten da ev auch ein Pointer ist. Es fehlt der Stern * .
Benj
Beiträge: 9
Registriert: 14. April 2017 10:52

Re: leave event auf StackedWidget

Beitrag von Benj »

Habe die Pointer so wie unten im Codeschnipsel gesetzt, funktioniert jetzt prima. Danke!!

Code: Alles auswählen

bool MainWindow::eventFilter(QObject *obj, QEvent *ev){
    if((obj == ui->stackedWidget) && (ui->stackedWidget->currentIndex() == 1)){
        if(ev->type() == QEvent::KeyPress)
        {
            QKeyEvent *key = dynamic_cast<QKeyEvent*>(ev);
            if(key->key() == Qt::Key_Control){

                ui->stackedWidget->setCurrentIndex(0);
                ui->stackedWidget->setCursor(Qt::ArrowCursor);
                this->socket->closeTcp();
                return true;
            }

        }
        else{
            this->position = this->mapToGlobal(this->pos());
            int x = position.x(); int y=position.y();
            this->cursor().setPos((x/2)+175, (y/2)+175);
            return true;
        }

        return false;
    }
}
Antworten