Unsolved QEventPress... difficoltà di utilizzo
-
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 routinevirtual 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:
Anche mettendo "virtual" nella definizione l'errore rimane. Noto che l'errore lo segnala su un modulo non scritto da me. -
virtual
va nella definizione della classe. spostavirtual
dal .cpp al .h -
L'ho fatto, ma rimane il secondo errore detto prima: "virt-specifiers in ..."
-
hai lasciato virtual nel .cpp? se si toglilo. deve essere solo nel .h
-
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:
-
scusa, sono cieco. anche
Q_DECL_OVERRIDE
va nel .h non nel .cpp -
WOW ha complilato... Ora vediamo se funziona. In ogni caso: grazie, grazie, grazie.
-
Non, non riesco a bloccare il loop. Proverò a mettere qualche cout per vedere cos'è che non va.
-
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.
-
@bvox123 said in QEventPress... difficoltà di utilizzo:
while (faseesecuzione != 0) {
// QApplication::processEvents();
AzioniSulCasino();
attesa.msleep(5000);
}Dove sarebbe questo loop?
-
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.
-
Intendo in che funzione e'?
HRnet_0100_QuadroComandi::contaCicli
? -
No, non è in contacicli. Dovrei spostarla lì ? Ma keypressevent non dovrebbe essere invocata comunque ?
-
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.