Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. QEventPress... difficoltà di utilizzo

QEventPress... difficoltà di utilizzo

Scheduled Pinned Locked Moved Unsolved Italian
28 Posts 2 Posters 11.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by
    #10

    Non c'e' niente di evidentemente sbagliato nel codice che hai postato (piccola nota = Q_NULLPTR e meglio sia messo nell'header invece che len cpp).

    Che errori ti da il compilatore?

    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
    ~Napoleon Bonaparte

    On a crusade to banish setIndexWidget() from the holy land of Qt

    1 Reply Last reply
    0
    • B Offline
      B Offline
      bvox123
      wrote on last edited by
      #11

      Ho fatto tante di quelle prove, senza comprenderne il significato, che ora non ricordo bene quale errore mi compariva. Mi pare che si piantasse nel main.cpp dicendo qualcosa tipo "no matching function for call to ..." all'assegnazione HRnet_0100 = new HRnet_0100_QuadroComandi; . Ho pensato che volesse un parametro e forse ho risolto facendo terminare l'istruzione con "(0);". Se la soluzione è quella giusta (ovvero passargli un parametro a zero), si blocca poi su:

      static unsigned int HRnet_0100_QuadroComandi::contaCicli(const std::atomic_bool* const stopper){ //importante che sia static
              unsigned int result =0;
              for(;stopper->load();++result){}
              return result;
          }
      

      della cui prima riga capisco poco e niente. Cosa dovrei mettere nell'header ?

      1 Reply Last reply
      0
      • B Offline
        B Offline
        bvox123
        wrote on last edited by
        #12

        Suggerimento per una persona tanto precisa che apprezzerà il suggerimento per ovviare a futuri errori: "da" terza persona singolare del verbo dare va accentata ("dà").

        VRoninV 1 Reply Last reply
        0
        • B Offline
          B Offline
          bvox123
          wrote on last edited by
          #13

          Una domanda (se accetti la mia pedanteria).
          Nella spiegazione della sintassi da utilizzare per una routine ho trovato che se nell'header scrivo "int routine(string);" nel .cpp ci sarà "int routine(string parametrostringa) e la routine terminerà col return di un intero. C'è una corrispondenza fra header e cpp. Corrispondenza che non trovo nel costruttore della classe. Come ultimo elemento passo riferimenti a modulo ui, senza che nell'header ci sia niente, inoltre con l'aggiunta del rigo "m_risultatoContatore" di questo parametro non ho indicato nulla nell'header. Ma poi, quelle due parti del costruttore si possono chiamare parametri ? Che ignorante che sono. :-(

          1 Reply Last reply
          0
          • B bvox123

            Suggerimento per una persona tanto precisa che apprezzerà il suggerimento per ovviare a futuri errori: "da" terza persona singolare del verbo dare va accentata ("dà").

            VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #14

            @bvox123 said in QEventPress... difficoltà di utilizzo:

            Suggerimento per una persona tanto precisa che apprezzerà il suggerimento per ovviare a futuri errori: "da" terza persona singolare del verbo dare va accentata ("dà").

            Questo e' il motivo di "piccola nota = Q_NULLPTR e meglio sia messo nell'header invece che len cpp"

            si blocca poi su:

            puoi postare l'errore?

            della cui prima riga capisco poco e niente

            come regola generale non va mai passato un metodo non statico a Qt::Concurrent perche' l'oggetto potrebbe essere distrutto prima che Qt::Concurrent finisca e crashare questo e' il motivo per cui ho messo static. D'altra parte ho reintrodotto il problema passando faseesecuzione quindi "I played myself". Per vedere il problema, premi F11 (1 sola volta) e chiudi il programma. Dovrebbe crashare. Piu' tardi lo aggiusto.

            verbo dare va accentata ("dà").

            touché

            @bvox123 said in QEventPress... difficoltà di utilizzo:

            C'è una corrispondenza fra header e cpp.

            Corretto, e' necessario che ci sia.

            @bvox123 said in QEventPress... difficoltà di utilizzo:

            Ma poi, quelle due parti del costruttore si possono chiamare parametri ?

            no, e' una lista di inizializzazione

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            1 Reply Last reply
            0
            • B Offline
              B Offline
              bvox123
              wrote on last edited by
              #15

              Sono ancora lontano dal poter effettuare una prova e farlo crashare.
              Spero comunque di essere all'ultimo problema.
              Nell'header ho *void keyPressEvent(QKeyEvent ); e nel .cpp la routine

              virtual void HRnet_0100_QuadroComandi::keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE{
                     if (event->key() >= Qt::Key_F10 && event->key() <= Qt::Key_F12){
                         faseesecuzione = !faseesecuzione;
                         if(faseesecuzione)
                             m_risultatoContatore->setFuture(QtConcurrent::run(&HRnet_0100_QuadroComandi::contaCicli,&faseesecuzione));
                         return;
                     }
                     return QWidget::keyPressEvent(event);
                 }
              

              ed ottengo i seguenti errori:
              0_1504259316092_Schermata del 2017-09-01 11-47-56.png
              Anche mettendo "virtual" nella definizione l'errore rimane. Noto che l'errore lo segnala su un modulo non scritto da me.

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by
                #16

                virtual va nella definizione della classe. sposta virtual dal .cpp al .h

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                1 Reply Last reply
                0
                • B Offline
                  B Offline
                  bvox123
                  wrote on last edited by
                  #17

                  L'ho fatto, ma rimane il secondo errore detto prima: "virt-specifiers in ..."

                  1 Reply Last reply
                  0
                  • VRoninV Offline
                    VRoninV Offline
                    VRonin
                    wrote on last edited by
                    #18

                    hai lasciato virtual nel .cpp? se si toglilo. deve essere solo nel .h

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    1 Reply Last reply
                    0
                    • B Offline
                      B Offline
                      bvox123
                      wrote on last edited by
                      #19

                      Sì sì, ho fatto così e mi viene quell'errore. Per tranquillità riposto le due parti:

                      protected:
                          Ui::HRnet_0100_QuadroComandi *ui;
                          virtual void keyPressEvent(QKeyEvent *);
                      
                      void HRnet_0100_QuadroComandi::keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE{
                             if (event->key() >= Qt::Key_F10 && event->key() <= Qt::Key_F12){
                                 faseesecuzione = !faseesecuzione;
                                 if(faseesecuzione)
                                     m_risultatoContatore->setFuture(QtConcurrent::run(&HRnet_0100_QuadroComandi::contaCicli,&faseesecuzione));
                                 return;
                             }
                             return QWidget::keyPressEvent(event);
                         }
                      

                      e l'errore:
                      0_1504261268713_Schermata del 2017-09-01 12-20-38.png

                      1 Reply Last reply
                      0
                      • VRoninV Offline
                        VRoninV Offline
                        VRonin
                        wrote on last edited by
                        #20

                        scusa, sono cieco. anche Q_DECL_OVERRIDE va nel .h non nel .cpp

                        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                        ~Napoleon Bonaparte

                        On a crusade to banish setIndexWidget() from the holy land of Qt

                        1 Reply Last reply
                        0
                        • B Offline
                          B Offline
                          bvox123
                          wrote on last edited by
                          #21

                          WOW ha complilato... Ora vediamo se funziona. In ogni caso: grazie, grazie, grazie.

                          1 Reply Last reply
                          0
                          • B Offline
                            B Offline
                            bvox123
                            wrote on last edited by
                            #22

                            Non, non riesco a bloccare il loop. Proverò a mettere qualche cout per vedere cos'è che non va.

                            1 Reply Last reply
                            0
                            • B Offline
                              B Offline
                              bvox123
                              wrote on last edited by
                              #23

                              Nella routine che fa il loop infinito ho inserito uno sleep di 5 secondi per avere il tempo di fare click sul form e pigiare un tasto funzione. Inoltre ho messo un cout all'interno della routine loop. Ecco le routines:

                                      while (faseesecuzione != 0) {
                              //            QApplication::processEvents();
                                          AzioniSulCasino();
                                          attesa.msleep(5000);
                                      }
                              
                              void HRnet_0100_QuadroComandi::keyPressEvent(QKeyEvent *event) {
                                     if (event->key() >= Qt::Key_F1 && event->key() <= Qt::Key_F12){
                                         faseesecuzione = !faseesecuzione;
                                         cout << "KeyPress intercettato. faseesecuzione = " << faseesecuzione << endl;
                                         if(faseesecuzione)
                                             m_risultatoContatore->setFuture(QtConcurrent::run(&HRnet_0100_QuadroComandi::contaCicli,&faseesecuzione));
                                         return;
                                     }
                                     return QWidget::keyPressEvent(event);
                                 }
                              

                              Provato più volte a ridare il focus alla schermata e pigiare un tasto funzione, ma niente... ho dovuto chiudere il programma col click sulla X di chiusura (durante l'attesa dei 5 secondi). Nessun messaggio sul logout, quindi non entra nella routine. L'attesa è necessaria perché durante l'esecuzione normale il mouse viene spostato dal programma.

                              VRoninV 1 Reply Last reply
                              0
                              • B bvox123

                                Nella routine che fa il loop infinito ho inserito uno sleep di 5 secondi per avere il tempo di fare click sul form e pigiare un tasto funzione. Inoltre ho messo un cout all'interno della routine loop. Ecco le routines:

                                        while (faseesecuzione != 0) {
                                //            QApplication::processEvents();
                                            AzioniSulCasino();
                                            attesa.msleep(5000);
                                        }
                                
                                void HRnet_0100_QuadroComandi::keyPressEvent(QKeyEvent *event) {
                                       if (event->key() >= Qt::Key_F1 && event->key() <= Qt::Key_F12){
                                           faseesecuzione = !faseesecuzione;
                                           cout << "KeyPress intercettato. faseesecuzione = " << faseesecuzione << endl;
                                           if(faseesecuzione)
                                               m_risultatoContatore->setFuture(QtConcurrent::run(&HRnet_0100_QuadroComandi::contaCicli,&faseesecuzione));
                                           return;
                                       }
                                       return QWidget::keyPressEvent(event);
                                   }
                                

                                Provato più volte a ridare il focus alla schermata e pigiare un tasto funzione, ma niente... ho dovuto chiudere il programma col click sulla X di chiusura (durante l'attesa dei 5 secondi). Nessun messaggio sul logout, quindi non entra nella routine. L'attesa è necessaria perché durante l'esecuzione normale il mouse viene spostato dal programma.

                                VRoninV Offline
                                VRoninV Offline
                                VRonin
                                wrote on last edited by
                                #24

                                @bvox123 said in QEventPress... difficoltà di utilizzo:

                                while (faseesecuzione != 0) {
                                // QApplication::processEvents();
                                AzioniSulCasino();
                                attesa.msleep(5000);
                                }

                                Dove sarebbe questo loop?

                                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                                ~Napoleon Bonaparte

                                On a crusade to banish setIndexWidget() from the holy land of Qt

                                1 Reply Last reply
                                0
                                • B Offline
                                  B Offline
                                  bvox123
                                  wrote on last edited by
                                  #25

                                  Quando pigio un pulsante metto a 1 la variabile faseesecuzione e resterà così finché non viene intercettata la pressione di un tasto funzione e lo riporta a zero. Forse qui c'è un errore, perché "non 1" credo che divenga -1 e non zero, comunque nella routine del keypressevent non è mai entrato.

                                  1 Reply Last reply
                                  0
                                  • VRoninV Offline
                                    VRoninV Offline
                                    VRonin
                                    wrote on last edited by
                                    #26

                                    Intendo in che funzione e'? HRnet_0100_QuadroComandi::contaCicli?

                                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                                    ~Napoleon Bonaparte

                                    On a crusade to banish setIndexWidget() from the holy land of Qt

                                    1 Reply Last reply
                                    0
                                    • B Offline
                                      B Offline
                                      bvox123
                                      wrote on last edited by
                                      #27

                                      No, non è in contacicli. Dovrei spostarla lì ? Ma keypressevent non dovrebbe essere invocata comunque ?

                                      1 Reply Last reply
                                      0
                                      • B Offline
                                        B Offline
                                        bvox123
                                        wrote on last edited by
                                        #28

                                        Ciao VRonin. Mi piacerebbe capire come sistemare le cose affinché funzioni il keypressevent, ma se non è semplice trovarne l'inghippo lascia stare perché ho pensato ad un'altra soluzione alternativa al tasto funzione. A programma testo se è stato spostato il mouse, se no eseguo il loop, se sì arresto l'iterazione.

                                        1 Reply Last reply
                                        0

                                        • Login

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Categories
                                        • Recent
                                        • Tags
                                        • Popular
                                        • Users
                                        • Groups
                                        • Search
                                        • Get Qt Extensions
                                        • Unsolved