2013-05-16 30 views
9

我想處理一個點擊的鏈接在此應用礦井:在QLabel插入可點擊的鏈接,並檢測點擊這個鏈接挑起行動

my application

當我點擊「輸出文件「鏈接,我希望能夠在我的應用程序中生成一個動作。

截至今日,鏈接是這樣的富文本QLabel描述:

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

(使用Qt Designer生成)

點擊時,它會打開默認的Web瀏覽器去谷歌。那不是我想要的;我想是這樣的:

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

而且能夠檢測到被點擊的鏈接,並作出相應的反應:

(pseudo code) 

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

這是可能的Qt中有QLabel(或接近的東西)?怎麼樣?

+0

你可以試試[過濾事件](http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter)對於QLabel,但我不知道你怎麼會知道在哪裏鏈接是。 – sashoalm

回答

25

好,對於那些有興趣,我得到了答案:

  1. 禁用的QLabel
  2. 的「openExternalLinks」屬性QLabel的信號linkActivated連接到您的處理程序。

這就是:linkActivated給你的鏈接指向的說法,所以我的僞代碼工作完美的URL。

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

感謝幫助我 – MistyD

+0

奇怪的是,像_http:// _或_mailto:_這樣的基本鏈接不能打開瀏覽器/郵件應用程序。使用這個代碼+ _QDesktopServices :: openUrl_我可以使它工作。 – Borzh

+1

@Borzh:你只需要事先設置文本交互標誌。例如:'item-> setTextInteractionFlags(Qt :: TextBrowserInteraction);用品 - > setOpenExternalLinks(真);用品 - > setHtml(/ *任何* /);'。在這個工作示例中'item'是一個'QGraphicsTextItem *'。無需'QDesktopServices :: openUrl'或自定義信號/處理程序。 –