2013-05-16 27 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'或自定义信号/处理程序。 –