[Interest] The touch screen events are block after deleteLater function
Tony Rietwyk
tony at rightsoft.com.au
Thu Feb 16 13:34:27 CET 2023
Hi Gianmarco,
Maybe if you listen for button click events - they should work
regardless of mouse or touch. What platform are you running on?
Regards,
Tony
On 16/02/2023 11:09 pm, Axel Spoerl via Interest wrote:
> Hi Gianmarco,
>
> if I understand the code correctly, you depend on signals being fired
> from a push button. The Home class doesn't look like a button, so it
> will never receive mouse button events.
> That's probably why the qDebug() doesn't see any.
>
> You need to intercept the events of that push button:
> Unless already enabled, please set the Qt::WA_AcceptTouchEvents
> attribute on the button. Install an event filter on the button and
> qDebug() all incoming events.
> Watch out for TouchBegin, TouchUpdate, TouchEnd. You could intercept
> and interpret those and emit an own signal, if the press & release
> signals don't get fired correctly.
>
> Brgds
> Axel
> ------------------------------------------------------------------------
> *Von:* g.scarpelli at u-tech.it <g.scarpelli at u-tech.it>
> *Gesendet:* Donnerstag, 16. Februar 2023 12:41
> *An:* Axel Spoerl <axel.spoerl at qt.io>
> *Cc:* interest at qt-project.org <interest at qt-project.org>
> *Betreff:* Re:AW: [Interest] The touch screen events are block after
> deleteLater function
>
> Hi Axel ,
>
> Using the qDebug I see and the code below, QEvent::MouseButtonPress
> never fires if I press the touch:
>
> ----------Home.cpp-------------
>
> bool Home::event ( QEvent * curEvent ) {
>
> if ( curEvent -> type ( ) == QEvent::MouseButtonPress ) {
> qDebug ( ) << "Click!" ;
> }
>
> return QWidget::event ( curEvent ) ;
> }
>
>
> ------------Home.h--------------
> ...
> private:
> bool event ( QEvent * curEvent ) override ;
> ...
>
> I also tried using the setFocus and update function. But I don't solve
> the problem. In this way:
>
> void Home::closeAvvioLavaggio()
> {
> disconnect(window,&Lavaggio::closeLavaggio,this,&Home::closeAvvioLavaggio);
> window->deleteLater();
> window = nullptr ;
>
> |this->setFocus ( ) ; this->update ( ) ; |
>
> }
>
> do you have any suggestion?
>
> Thanks,
>
> Gianmarco
>
>
>
>
> *-*-*-*-*-*-*-*-*-*-*-*-*
> Dot. Gianmarco Scarpelli
> Microtech Srl
> Via Mameli, 94
> 53043 Chiusi (Si)
> http://www.microtechsrl.net
> Tel +39 0578 294621
> Fax +39 0578 1900218
> ************************
> Attenzione: Le informazioni contenute in questo messaggio di posta
> elettronica sono private e confidenziali, riservate solo
> all'attenzione del destinatario. Qualora doveste ricevere questo
> messaggio per errore, Vi notifichiamo con la presente che ogni
> diffusione, riproduzione, distribuzione o utilizzo del presente
> messaggio è altamente proibita. Siete pregati di informare il mittente
> con un messaggio di risposta e cancellare immediatamente il presente
> messaggio ed il suo eventuale contenuto, senza copiarlo o aprirlo.
> *****************************************************
> This e-mail and any file transmitted with it, which may contain
> confidential and/or privileged material, is legally privileged and
> intended solely for the recipient. Access to this e-mail by anyone
> else, use it for any purpose, store, copy, disclose the contents to
> any other person totally or partially is strictly prohibited and
> illegal. If you are not the intended recipient(s), please do not read
> this e-mail, delete this message and any attachments from your system
> and contact the sender by reply e-mail or by telephone.
> *****************************************************
>
>
> From"Axel Spoerl" axel.spoerl at qt.io
> To"interest at qt-project.org"
> interest at qt-project.org,"g.scarpelli at u-tech.it" g.scarpelli at u-tech.it
> Cc
> DateThu, 16 Feb 2023 10:39:35 +0000
> SubjectAW: [Interest] The touch screen events are block after
> deleteLater function
>
> It's difficult to analyze the problem without seeing the whole code,
> especially the graphics layout.
> The deleteLater-instruction will cause the object to be deleted, when
> events are being processed.
> The error could be another widget acquiring focus or overlaying the
> button, before the button is released.
> When the finger is released, the touch gesture can no longer be
> attributed to the button and the release signal is not emitted.
> That would explain why it happens on the touch screen, but not with
> the mouse.
> A possible workaround is to connect to the button's pressed signal.
>
> In order to find the issue, you have to implement a helper, listening
> to all relevant signals and qDebug() the result.
> The screen freeze could be caused by accessing a deleted object, but
> also by a blocking infinite loop. Throwing qDebugs in the code will
> shed more light on this.
> ------------------------------------------------------------------------
> *Von:* Interest <interest-bounces at qt-project.org> im Auftrag von
> g.scarpelli at u-tech.it <g.scarpelli at u-tech.it>
> *Gesendet:* Donnerstag, 16. Februar 2023 10:53
> *An:* interest at qt-project.org <interest at qt-project.org>
> *Betreff:* [Interest] The touch screen events are block after
> deleteLater function
>
> Hi,
>
> I am development my application with the qt 5.15 (c++ code) .The my
> application is implement using objects are child of the QWidget class.
> Every time that I open a child class connect the closing signal at the
> slot to parent class to delete the object child :
>
> PARENT CLASS :
> windows = new ChildClass ( ) ;
> connect
> (childClass,&childClass::signalClose,parentClass,&parentClass::closeChildClass);
> windows-> showFullScreen ( ) ;
>
> CHILD CLASS :
> emit signalClose ( ) ;
>
> PARENT CLASS :
> slot closeChildClass :
> windows-> deleteLater ( ) ;
>
> I have Implement a application to execute this simple code, if I can
> keep press the touch screen with my finger when the application
> execute the windows-> deleteLater ( ) instruction, the touch screen is
> freeze, I don't can to press the button of the my application with the
> display touch. While if I connect the mouse I can press the button
> correctly, but if to press button with the finger not spring the
> &QPushButton::released event. If I can to active
> &QPushButton::released event with mouse, means that my application is
> not block and the button is enabled. If I comment the windows->
> deleteLater ( ) instruction I don't this problem. Afer that problem
> occurred if I restart the application it work correctly, without power
> off the pc, so the display touch work correcty.
>
> Can you help me ?
> This problem blocking the release the my application !
> Thanks
>
> ----------------------- home.h -------------------------`
>
> #ifndef HOME_H
> #define HOME_H
>
> #include <QWidget>
>
>
> //---------------------
> //INCLUDE VALIDI PER TUTTE LE FINESTRE
> #include <QScreen>
> #include <QDebug>
> #include <QTimer>
> #include <QDateTime>
> #include <QFile>
> #include <QJsonDocument>
> #include <QJsonValue>
> #include <QJsonArray>
> #include <QJsonObject>
> #include <QFileInfo>
> #include <QSqlDatabase>
> #include <QSqlError>
> #include <QSqlQuery>
> #include <QMessageLogContext>
> #include <QLoggingCategory>
> //---------------------
> #include "lavaggio.h"
>
> #include <QtGui>
> #include <QPainter>
> #include <QStyleOption>
> #include <QDir>
>
>
> namespace Ui {
> class Home;
> }
>
> class Home : public QWidget
> {
> Q_OBJECT
>
> public:
> explicit Home ( Init *tmp_init = nullptr, QWidget *parent =
> nullptr ) ;
> ~Home();
>
> protected:
> void paintEvent(QPaintEvent *)
> {
> QStyleOption opt;
> opt.init(this);
> QPainter p(this);
> style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
> }
>
> signals :
>
> public slots :
>
> void openAvvioLavaggio();
> void closeAvvioLavaggio();
>
> private slots:
>
> private :
> Ui::Home *ui ;
> Lavaggio *window = nullptr ;
>
> } ;
>
>
> #endif // HOME_H
>
> ----------------------- home.cpp -------------------------
> Home::Home (Init * tmp_init , QWidget * parent ) :
> QWidget ( parent ) ,
> ui ( new Ui::Home )
> {
> qDebug ( ) << "Load Home" ;
>
> ui->setupUi(this);
>
> this -> setWindowFlags ( Qt::Window | Qt::CustomizeWindowHint ) ;
> connect(ui->btn_avvio_lavaggio, &QPushButton::released, this,
> &Home::openAvvioLavaggio);
>
> }
>
> void Home::openAvvioLavaggio(){
>
> qDebug ( ) <<"Start 'wash'.";
>
> // creo istanza oggetto finestra Avvio Lavaggio
> window= new Lavaggio();
>
> //collego slot-signal all'eventi di chiusura del widget
> // Note : time to execute this instruction about 500ms
> connect(window,&Lavaggio::closeLavaggio,this,&Home::closeAvvioLavaggio);
>
> //visualizzo schermata Avvio Lavaggio
> window->showFullScreen();
>
> // Remove the 'stays on top hint'
> this -> setWindowFlags ( Qt::Window | Qt::CustomizeWindowHint ) ;
>
>
> }
>
> void Home::closeAvvioLavaggio()
> {
> qDebug ( ) <<"closeAvvioLavaggio";
>
> //scollego slot-signal all'eventi di chiusura del widget
> disconnect(window,&Lavaggio::closeLavaggio,this,&Home::closeAvvioLavaggio);
> window->deleteLater();
> window = nullptr ;
>
> }
>
> ----------------------- lavaggio.h -------------------------
> #ifndef LAVAGGIO_H
> #define LAVAGGIO_H
>
> #include <QWidget>
> //---------------------
> //INCLUDE VALIDI PER TUTTE LE FINESTRE
> #include <QScreen>
> #include <QDebug>
> #include <QTimer>
>
> #include <QDateTime>
> #include <QProcess>
> #include <QFile>
> #include <QJsonDocument>
> #include <QJsonValue>
> #include <QJsonArray>
> #include <QJsonObject>
> #include <QFileInfo>
> #include <QSqlDatabase>
> #include <QSqlError>
> #include <QSqlQuery>
> #include <QSqlRecord>
>
> #include <QtGui>
> #include <QPainter>
> #include <QStyleOption>
>
> //---------------------
> #include "pagamentolavaggioasciugatura.h"
> #include "messagebox.h"
> #include "ChooseTypeWash.h"
> #include "laundrysettings.h"
> #include "laundryapp.h"
>
>
> namespace Ui {
> class Lavaggio;
> }
>
> class Lavaggio : public QWidget
> {
> Q_OBJECT
>
> public:
> explicit Lavaggio( QWidget *parent = nullptr);
> ~Lavaggio();
>
>
> protected:
> void paintEvent(QPaintEvent *)
> {
> QStyleOption opt;
> opt.init(this);
> QPainter p(this);
> style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
> }
>
> signals :
> // Close the window
> void closeLavaggio ( ) ;
>
> private slots:
> // Exit from screen
> void exitWash ( ) ;
>
> private:
> Ui::Lavaggio *ui;
>
> } ;
>
> #endif // LAVAGGIO_H
>
>
> ----------------------- lavaggio.cpp -------------------------
>
> Lavaggio::Lavaggio ( QWidget *parent ) :
> QWidget(parent),
> ui(new Ui::Lavaggio)
> {
> qDebug ( ) <<"Load Lavaggio";
>
> //--------------------------------------
> //CARICAMENTO GRAFICA
> //avvio caricamento grafica
> ui->setupUi(this);
>
> // --------------------------------------
> // PERSONALIZZAZIONE GRAFICA
> // queste impostazioni grafiche devono valere per tutte le finestre
> // per eliminare la toolbar
> // Note: Time to execute this instruction about 500ms
> this->setWindowFlags(Qt::Window | Qt::CustomizeWindowHint |
> Qt::WindowStaysOnTopHint );
>
> connect(ui->btn_indietro, &QPushButton::released, this,
> &Lavaggio::exitWash);
>
> }
>
> void Lavaggio::exitWash ( ) {
>
> qDebug ( ) <<"Check Exit wash" ;
>
> qDebug ( ) << "Exit -> wash" ;
>
> emit closeLavaggio ( ) ;
>
> close ( ) ;
>
> }
>
>
>
>
>
>
>
>
>
>
> *-*-*-*-*-*-*-*-*-*-*-*-*
> Dot. Gianmarco Scarpelli
> Microtech Srl
> Via Mameli, 94
> 53043 Chiusi (Si)
> http://www.microtechsrl.net
> Tel +39 0578 294621
> Fax +39 0578 1900218
> ************************
> Attenzione: Le informazioni contenute in questo messaggio di posta
> elettronica sono private e confidenziali, riservate solo
> all'attenzione del destinatario. Qualora doveste ricevere questo
> messaggio per errore, Vi notifichiamo con la presente che ogni
> diffusione, riproduzione, distribuzione o utilizzo del presente
> messaggio è altamente proibita. Siete pregati di informare il mittente
> con un messaggio di risposta e cancellare immediatamente il presente
> messaggio ed il suo eventuale contenuto, senza copiarlo o aprirlo.
> *****************************************************
> This e-mail and any file transmitted with it, which may contain
> confidential and/or privileged material, is legally privileged and
> intended solely for the recipient. Access to this e-mail by anyone
> else, use it for any purpose, store, copy, disclose the contents to
> any other person totally or partially is strictly prohibited and
> illegal. If you are not the intended recipient(s), please do not read
> this e-mail, delete this message and any attachments from your system
> and contact the sender by reply e-mail or by telephone.
> *****************************************************
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> https://lists.qt-project.org/listinfo/interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20230216/b4c1e8a7/attachment-0001.htm>
More information about the Interest
mailing list