QEventPress... difficoltà di utilizzo
-
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. :-( -
@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 cheQt::Concurrent
finisca e crashare questo e' il motivo per cui ho messo static. D'altra parte ho reintrodotto il problema passandofaseesecuzione
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
-
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. -
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:
-
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.
-
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.
-
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.