qplaintext

Mattepuffo's logo
Eseguire comandi in Qt con QProcess

Eseguire comandi in Qt con QProcess

QProcess è la classe per Qt preposta all'esecuzione di comandi esterni.

Oggi vediamo come usarla, e nello specifico:

  • eseguiremo un comando
  • cattureremo lo stanard input visualizzandolo su una QPlainTextEdit
  • cattureremo lo stanard error visualizzandolo su una QPlainTextEdit

Così facendo vedremo l'output del comando in tempo reale.

Mattepuffo's logo
Usare il drag and drop in Qt

Usare il drag and drop in Qt

Debbo dire che Qt mi sorprende sempre di più nella facilità di molte cose.

Certo, è sempre C++, e molto cose non sono subito intuitive; ma altre sono molto facili!

Oggi vediamo come usare il drag and drop in una nostra finestra; il target è un oggetto QPlainTextEdit, ma vale anche per altri componenti di testo.

Quello che vogliamo ottenere è una lista di file, lista creata trascinandoli sulla QPlainTextEdit; i file accettati saranno solo JPEG, JPG e PNG.

Prima di tutto, nel nostro designer, impostiamo il readOnly e leviamo il flag ad acceptDrops.

Mattepuffo's logo
Tab order in Qt

Tab order in Qt

Piccolo trick sulle Qt.

Nella mia finestra principale avevo una QLineEdit e un QButton.

Poi ho aggiunto una QPlainTextEdit e mi è successo che dalla QLineEdit, premendo il tasto TAB, andavo a finire sulla QPlainTextEdit, e non sul QButton.

Per come era fatta questa piccola app non andava bene.

Per cambiare questo comportamento si può usare la funzione setTabOrder di QWidget.

Mattepuffo's logo
Eseguire comandi di sistema in C++

Eseguire comandi di sistema in C++

Eseguire comandi di sistema in C++ non è molto complicato.

Per farlo possiamo usare la funzione system().

Eccovi un semplice esempio su Linux:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    printf("Eseguo comando ls");

    system("ls -l");

    exit(0);

}

Il problema di questa funzione è che anche se stampa il risultato del comando, comunque ritorna un int.

Quindi se ad esempio vogliamo stampare il risultato in un componente grafico tipo un QPlainTextEdit (che richiede quantomeno un oggetto string e non un int) come possiamo fare?

Ci sono diverse soluzioni; io ho usato la funzione popen().

Nel caso specifico ho una piccola classe con una funzione che esegue il comando nmap con i vari parametri.