2011-09-06 29 views
3

如何將一個定位點<a>置入whatsThis中,以獲取點擊它的攔截對象?Qt Whats This使用鏈接/定位器

我知道QLabel中的linkActivated或QTextBrowser中的linkClicked,但我不知道如何使用Whats This Text來做同樣的事情。

爲了清楚起見,我想知道如果沒有攔截幫助事件和管理我自己的WhatsThis機制,這是否可能。

回答

5

如果我理解你的問題,那就是你想知道這個是否有SIGNAL()。似乎沒有。看來你已經觀看了QWhatsThisClickedEvent通過導出自己的Widget類或具有某種全局過濾的:

http://qtcentre.org/archive/index.php/t-7394.html

僅供參考,其中QWhatsThisClickedEvent在Qt的源發出的實際點是在這裏:

http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/kernel/qwhatsthis.cpp#line264

+0

我採取了這種方法。我已經在我的應用程序類中有一個自定義的「notify」函數,所以我只是看着'QWhatsThisClickedEvent'。我只是將Url傳遞給'QDesktopServices :: openUrl'並讓普通機制接管(爲此我已經有了一個鉤子)。奇怪這不是默認行爲。 –

+0

看起來很奇怪,但有一個默認行爲,讓潛在的文本注入在系統上啓動另一個應用程序可能被認爲是某種安全風險...?再一次,我可能讀得太多了。 :) – HostileFork

1

HostileFork的答案是非常多的錢。一個簡單的方法可能會工作,除非你有自己捕獲WhatsThisClicked事件的小部件,那就是在主窗口小部件中監聽WhatsThisClicked事件。代碼非常簡單,如下所示:

bool MyMainWindow::event(QEvent* ev) 
{ 
    if (ev->type() == QEvent::WhatsThisClicked) 
    { 
     ev->accept(); 
     QWhatsThisClickedEvent* whatsThisEvent = dynamic_cast<QWhatsThisClickedEvent*>(ev); 
     assert(whatsThisEvent); 
     QDesktopServices::openUrl(whatsThisEvent->href()); 
     return true; 
    } 
    return QMainWindow::event(ev); 
}