2013-05-16 11 views
9

vorrei gestire con un semplice clic sul link in questa applicazione di mine:Inserire link cliccabile in QLabel e rilevare cliccare su questo link per provocare un'azione

my application

Quando clicco sul "Uscita File "link, mi piacerebbe essere in grado di generare un'azione nella mia applicazione.

A partire da oggi, il collegamento è descritta come questo nella ricca QLabel testo:

<a href="http://google.fr"><span style=" text-decoration: underline; color:#0000ff;">Output File&quot;</span></a> 

(generato da Qt Designer)

Quando si fa clic, si aprirà il browser web predefinito di andare a Google. Non è quello che voglio; Mi piacerebbe qualcosa di simile:

<a href="#browse_output"><span style=" text-decoration: underline; color:#0000ff;">Output File&quot;</span></a> 

ed essere in grado di rilevare il collegamento che è scattato e reagire di conseguenza:

(pseudo code) 

if(link_clicked.toString() == "#browse_output"){ 
    on_browse_output_clicked(); 
} 

Questo è possibile in Qt con una QLabel (o qualcosa che si avvicina)? Come?

+0

Si può provare [eventi filtraggio] (http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter) per QLabel, ma non sono sicuro di come si sa dove il collegamento è – sashoalm

risposta

25

Ok, per chi fosse interessato, ho avuto la risposta:

  1. disattivare il "openExternalLinks" proprietà del QLabel
  2. Collegare il segnale linkActivated del QLabel al gestore.

Questo è tutto: linkActivated fornisce l'URL a cui fa riferimento il collegamento in argomento, quindi il mio pseudo codice funziona perfettamente.

// header 
private slots: 
    void on_description_linkActivated(const QString &link); 

// cpp 
void KernelBuild::on_description_linkActivated(const QString &link) 
{ 
    if(link == "#browse_output"){ 
    on_outfilebtn_clicked(); 
    } 
} 
+0

Grazie che mi ha aiutato – MistyD

+0

Stranamente, i link di base come _http: // _ o _mailto: _ non aprono l'applicazione browser/mail. Usando questo codice + _QDesktopServices :: openUrl_ Potrei farlo funzionare. – Borzh

+1

@Borzh: è sufficiente impostare preventivamente i flag di interazione del testo. Ad esempio: 'item-> setTextInteractionFlags (Qt :: TextBrowserInteraction); item-> setOpenExternalLinks (true); item-> setHtml (/ * qualunque * /); '. In questo esempio di lavoro 'item' è un' QGraphicsTextItem * '. Nessuna necessità di 'QDesktopServices :: openUrl' o segnali/gestori personalizzati. –