2013-05-16 19 views
9

chciałbym obsłużyć kliknięcie na odnośnik w niniejszym wniosku kopalni:Insert klikalny link w QLabel i wykrywania kliknąć na ten link, aby sprowokować skargę

my application

Kiedy klikam na „Output Plik "link, chciałbym móc wygenerować akcję w mojej aplikacji.

dzień dzisiejszy, link jest opisane jak to w bogatej QLabel tekstem:

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

(generowanego przez Qt Designer)

Po kliknięciu otworzy domyślną przeglądarkę internetową, aby przejść do Google. Nie tego chcę; Chciałbym coś takiego:

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

i być w stanie wykryć, że użytkownik klika łącze i odpowiednio zareagować:

(pseudo code) 

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

Jest to możliwe w Qt z QLabel (lub coś zbliża)? W jaki sposób?

+0

Można spróbować [wydarzenia filtrowanie] (http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter) dla QLabel, ale nie jestem pewien, w jaki sposób będziesz wiedział, gdzie link jest. – sashoalm

Odpowiedz

25

Ok, dla zainteresowanych, dostałem odpowiedź:

  1. wyłączyć "openExternalLinks" własność QLabel
  2. podłączyć sygnał linkActivated z QLabel do obsługi.

To wszystko: linkActivated podaje adres URL, do którego odnosi się link w argumencie, więc mój pseudo kod działa idealnie.

// 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

Dzięki, które pomogły mi – MistyD

+0

Dziwne, podstawowe linki, takie jak _http: // _ lub _mailto: _ nie otwierają przeglądarki/aplikacji pocztowej. Używając tego kodu + _QDesktopServices :: openUrl_ mógłbym sprawić, żeby działało. – Borzh

+1

@Borzh: wystarczy wcześniej ustawić flagi interakcji tekstowych. Na przykład: 'item-> setTextInteractionFlags (Qt :: TextBrowserInteraction); item-> setOpenExternalLinks (true); item-> setHtml (/ * cokolwiek * /); '. W tym przykładzie roboczym 'item' jest' QGraphicsTextItem * '. Nie ma potrzeby stosowania 'QDesktopServices :: openUrl' lub niestandardowych sygnałów/uchwytów. –