2013-08-21 77 views
3

你好簡單的問題,但我找不到答案。 我目前在標籤的完整路徑exe文件在桌面上,我怎樣才能使它可點擊超鏈接 ,將推出該exe文件?Qt:如何超鏈接到EXE文件

回答

3

您可以使用此代碼:

QLabel *lbl = new QLabel; 
lbl->setText("<a href='file:///c:/fg740p.exe'>Open</a>"); 
lbl->setOpenExternalLinks(true); 
lbl->show(); 

替代C:/fg740p.exe與路徑的.exe文件。 而且您可能知道打開是向用戶顯示的內容。

+0

奇怪的事情,但如果我這樣做,你showen其工作,例如不工作: 用戶界面 - > labelDone->的setText(」等等你的桌面。\ n「 \t」Open「\t); and working: ui-> labelDone-> setText(「Open」\t); 我該如何支持2? – user63898

+0

@ user63898〜>使用完整的HTML:'lbl->的setText( 「泄密泄密泄密
」 「 Open」);' – saeed

+0

@ user63898如果你的路徑是一個變量,那麼首先構造一個QString的。 'QString url(「Open」; lbl-> setText(url);' –

3

賽義德的代碼應該在Windows上運行,但在其他平臺上的安全性是嚴格和操作系統可能不允許你勞克這樣的外部應用程序(Linux爲例。)

便攜的方式做這是先創建QLabel像往常一樣:

QLabel* label = new QLabel(parent); 

然後把一個鏈接在它:

label->setText("<a href='dummy_string'>Execute</a>"); 

然後連接的linkActivated(QString的)信號到一個槽,這樣每當用戶點擊該標籤內的鏈接你收到此通知:

connect(label, SIGNAL(linkActivated(QString)), SLOT(onLinkClick())); 

由於有標籤裏面只有一個鏈接,該插槽不需要帶任何參數,因爲沒有必要在鏈接之間進行區分。因此,它可以是這樣的:

void onLinkClick() 
{ 
    QProcess::startDetached("path/to/program.exe"); 
} 

如果改爲選擇使用一個插槽,需要的QString,傳遞的值將鏈接的文本href。這可以讓你在QLabel中添加幾個鏈接,並知道其中哪些實際被點擊了。例如:

label->setText("<a href='path/to/1.exe'>Run 1.exe</a>" 
       <a href='path/to/2.exe'>Run 2.exe</a>"); 
connect(label, SIGNAL(linkActivated(QString)), SLOT(onLinkClick(QString))); 
// ... 

void onLinkClick(QString exeFilePath) 
{ 
    QProcess::startDetached(exeFilePath); 
} 
當我用文字combain它的格式,我的鏈接以純文本