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... qualche chiarimento.

QEventPress... qualche chiarimento.

Scheduled Pinned Locked Moved Solved Italian
3 Posts 2 Posters 1.0k 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.
  • B Offline
    B Offline
    bvox123
    wrote on last edited by
    #1

    Buongiorno.
    Per prova, ho creato una routine di questo tipo:

    int faseesecuzione = 0;
    void Prova::keyPressEvent(QKeyEvent *e) {
        cout << e->key() << endl;
        if (e->key() >= Qt::Key_F10 && e->key() <= Qt::Key_F12) faseesecuzione = 1;
        else faseesecuzione = 0; 
        e->accept();
        int i = 0;
        while (faseesecuzione == 1 ) {
            i++;
            cout << i << endl;
        }
    }
    

    Quando avvio il programma, si mette in attesa che io pigi un tasto e me lo fa vedere sul logout, ma se pigio da F10 a F12 parte il loop e non smette neppure se io pigio un altro tasto. Io vorrei proprio fare questo: cioè che un loop venga eseguito "eternamente" finché non si pigia qualche tasto scelto da me. C'è verso fare in modo che QEventPress venga eseguito con maggiore priorità del loop che ho inserito nella routine ?

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

      soluzione facile e veloce ma non pulita:
      aggiungi QApplication::processEvents(); all'interno del loop

      l'alternativa piu pulita e' usare un thread:

      #include <QWidget>
      #include <QFutureWatcher>
      #include <QtConcurrentRun>
      #include <atomic>
      #include <QKeyEvent>
      #include <iostream>
      class Prova : public QWidget{
          Q_OBJECT
          Q_DISABLE_COPY(Prova)
      
          std::atomic_bool faseesecuzione;
          QFutureWatcher<unsigned int>* m_risultatoContatore;
      protected:
          virtual void 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(&Prova::contaCicli,&faseesecuzione));
                  return;
              }
              return QWidget::keyPressEvent(event);
          }
      public:
          Prova(QWidget* parent = Q_NULLPTR)
              : QWidget(parent)
              ,m_risultatoContatore(new QFutureWatcher<unsigned int>(this))
          {
              faseesecuzione=false;
              connect(m_risultatoContatore,&QFutureWatcher<unsigned int>::finished,this,[this](){
                  cicliContati(m_risultatoContatore->future().result());
              });
              connect(this,&Prova::cicliContati,[](unsigned int cicli)->void{
                  qDebug() << "cicli: "<< cicli;
              });
          }
          Q_SIGNAL void cicliContati(unsigned int);
          static unsigned int contaCicli(const std::atomic_bool* const stopper){ //importante che sia static
              unsigned int result =0;
              for(;stopper->load();++result){}
              return result;
          }
      };
      

      Edit: fixed buggy code

      "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
        #3

        Grande VRonin. Mi sei mancato nel periodo di ferie.

        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