1. 程式人生 > >Qt 之 QDesktopServices

Qt 之 QDesktopServices

簡述

QDesktopServices類提供的函式用於訪問常見的桌面服務。

許多桌面環境都會提供一系列服務,可以通過應用程式來執行常見任務,如:以使用者應用程式首選項的方式,開啟一個網頁。

此類包含為服務提供簡單介面的函式,返回值表明執行成功或失敗。

openUrl()函式用於開啟位於任意外部應用程式的URL檔案。如果URL對應於本地檔案系統的資源(URL scheme是”file”),將會用一個合適的應用程式開啟檔案,否則,將使用一個Web瀏覽器來獲取和顯示該檔案。

|

URL Handlers

openUrl()函式的行為可以定製,對於某些型別的URL,允許應用程式覆蓋預設的處理行為。

排程機制只允許每個URL scheme使用一個自定義handler,使用setUrlHandler()函式。每個handler為一個槽,只接受一個QUrl引數。

對於每個scheme,現有handler可以用unsetUrlHandler()函式移除,這將返回給定scheme的預設行為處理方式。

這個系統很容易實現幫助系統。例如:幫助可以提供標籤和文字瀏覽器使用URL:help://myapplication/mytopic,並通過註冊一個handler就可以顯示應用程式內的幫助文字。

class MyHelpHandler : public QObject
{
    Q_OBJECT
public:
    ...
public slots: void showHelp(const QUrl &url); }; QDesktopServices::setUrlHandler("help", helpInstance, "showHelp");

在handler中,如果你認為不能開啟請求的URL,可以呼叫QDesktopServices:openUrl(),它將試圖使用合適的使用者桌面環境開啟URL。

注意:Qt5以後,storageLocation()和displayName() 已經由QStandardPaths類的功能取代。

靜態共有成員函式

  • bool openUrl(const QUrl & url)

以使用者桌面環境的適當Web瀏覽器開啟指定的的url。如果成功,返回true;否則,返回false。

例如,用預設瀏覽器(例如:Chrome)開啟一個網址:

QDesktopServices::openUrl(QUrl("http://blog.csdn.net/liang19890820"));

如果URL是本地檔案(即:URL scheme是”file”),將會用一個合適的應用程式開啟,而不是Web瀏覽器。

例如,開啟一個Windows下包含空格的資料夾:

QDesktopServices::openUrl(QUrl("file:///D:/Program Files/Youdao"));

如果指定一個mailto地址,將會開啟e-mail客戶端(例如:Outlook),類似於由一個Web瀏覽器mailto到一個地址。

例如,下面的URL包含收件人([email protected])、主題(Qt)和正文(I am a Qter):

QString strUrl = QString("mailto:%1?subject=%2&body=%3").arg("user@qt.com").arg("Qt").arg("I am a Qter");
QDesktopServices::openUrl(QUrl(strUrl));

警告:

  1. 儘管許多e-mail客戶端可以傳送附件,並且是能夠處理unicode,使用者可能已經配置了客戶端沒有這些功能。同時,某些e-mail客戶端(例如:Lotus Notes)使用長URLs可能會有問題。

  2. 真正的返回值表示應用程式已成功請求作業系統用外部應用程式開啟請求的URL,但外部應用程式可能仍無法啟動或無法開啟請求的URL,這將不會報告給應用程式。

  • void setUrlHandler(const QString & scheme, QObject * receiver, const char * method)

為給定的scheme設定handler,receiver是接受者,method為receiver提供的處理函式。

這個函式提供了一種方法來定製openUrl()行為。如果以指定的scheme呼叫openUrl()(帶引數URL),接受者指定的函式將被呼叫來代替QDesktopServices啟動外部應用程式。

接受者提供的函式必須是一個槽,只有接受一個QUrl引數。

如果setUrlHandler()用於為已經擁有handler的scheme設定一個新的handler,現有的handler將被新的替換。由於QDesktopServices並不需要處理handler的所有權,當handler被替換時不刪除物件。

注意:handler將總是被執行QDesktopServices::openUrl()的相同執行緒呼叫。

例如,檢測到scheme為http或file時,不用預設的應用程式開啟,直接彈出一個提示框:

QDesktopServices::setUrlHandler("http", this, "openUrl");
QDesktopServices::setUrlHandler("file", this, "openUrl");

QDesktopServices::openUrl(QUrl("http://blog.csdn.net/liang19890820"));
QDesktopServices::openUrl(QUrl("file:///D:/Program Files/Youdao"));

bool MainWindow::openUrl(const QUrl &url)
{
    QString strScheme = url.scheme();
    if (QString::compare(strScheme, "http", Qt::CaseInsensitive) == 0)
    {
        QMessageBox::information(this, QString::fromLocal8Bit("提示"), QStringLiteral("開啟的是一個網址:%1").arg(url.url()));
        return true;
    }
    else if(QString::compare(strScheme, "file", Qt::CaseInsensitive) == 0)
    {
        QMessageBox::information(this, QString::fromLocal8Bit("提示"), QStringLiteral("開啟的是一個檔案:%1").arg(url.url()));
        return true;
    }

    return false;
}

很多人看了好多遍還不會這個用法,不明覺厲,趕快去試試吧!

  • void unsetUrlHandler(const QString & scheme)

刪除指定scheme預先設定的URL handler。

例如,對於上面定製的handler,現在不需要了:

QDesktopServices::unsetUrlHandler("http");

相關推薦

Qt QDesktopServices

簡述 QDesktopServices類提供的函式用於訪問常見的桌面服務。 許多桌面環境都會提供一系列服務,可以通過應用程式來執行常見任務,如:以使用者應用程式首選項的方式,開啟一個網頁。 此類包含為服務提供簡單介面的函式,返回值表明執行成功或失敗。 o

QtQDesktopServices 和 QStandardPaths

1、開啟瀏覽器網頁    QUrl url(QString("www.google.com"));   bool is_open = QDesktopServices::openUrl(url); 2、開啟本地檔案(夾)、可執行程式等   QString local_path = QString(

Qt自定義搜索框——QLineEdit裏增加一個Layout,還不影響正常輸入文字(好像是一種比較通吃的方法)

too 步驟 set box 文本 csdn sub void 鼠標 簡述 關於搜索框,大家都經常接觸。例如:瀏覽器搜索、Windows資源管理器搜索等。 當然,這些對於Qt實現來說毫無壓力,只要思路清晰,分分鐘搞定。 方案一:調用QLineEdit現

Qt入門實踐】Qt哲學家問題(linux 多線程)

avi .cpp private 1=1 endif debug 問題 tel pub 轉載請註明出處:http://blog.csdn.net/feng1790291543 linux多線程實現哲學家問題,依據哲學家吃飯、拿筷子、放下筷子...... 首先,主

Qt qwt 和 qwtpolar

shu fix style file ins nmake con http com 1 qwt 1.1 下載  qwt-6.1.3 版本下載地址: https://sourceforge.net/projects/qwt/files/qwt/ 1.2 解壓

Qtzip壓縮/解壓縮(QuaZIP)

com spm c++ ews pen 更多 pri cat markdown 摘要: 簡述 QuaZIP是使用Qt/C++對ZLIB進行簡單封裝的用於壓縮及解壓縮ZIP的開源庫。適用於多種平臺,利用它可以很方便的將單個或多個文件打包為zip文件,且打包後的zip文件可

QT設計部件背景色

ack 主界面 disable tracking avi blue line popu 基本 一、使用QT樣式表設計部件外觀 樣式表使用文本描寫敘述,能夠使用QApplication::setStyleSheet()函數將其設置到整個應用程序上。也能夠使用QWid

Qt 重復連接信號槽

style ref 重復 rtk doc svg cap http wls 059E2聘853F鉸http://t.docin.com/cufx6020 謔H戳桃桓51A判8w0芯http://t.docin.com/roj681 橙B3em刺灘姑0競eu奧0http:

QT初體驗1:如何學習QT個人淺見,以及如何讀取文本文件,在調試信息中輸出。

沒有 c++教程 最簡 將不 ror 聽說 講解 知識點 括號 2017年11月初,隨著工作崗位的調動,我轉到了研發崗,開始了漫漫程序員的成長之路。首先介紹下個人知識儲備,大一學習過C語言,沒有工程經驗,所學是為了期末考試+2級考試,考完在大學+碩士期間沒有用到編程。 來到

QTQSignalMapper(可以理解為轉發器,多個按鈕綁定到一個Edit上,且能分辨。每個單獨連接的話,反而麻煩)

this 不同的 lan each b2c etc gpo 知識點 span QT之QSignalMapper QT之QSignalMapper 簡述 效果圖 上代碼 相關知識點文章 結尾 簡述 QSign

QT圓形頭像(使用PNG的Mask達到的效果)

led asp mage gravity details fill text sca ima 廢話不多說!直接上代碼。 我們在很多UI設計應用中,需要用到自定義形狀頭像,在這裏,我對圓形頭像的設計做簡單的闡述,其它形狀頭像可參考本文做相應的更改即可。如下圖所

QtQEvent(所有事件的翻譯)

sin ini 隊列 方便 erp 拖放 sdn 所有 area QEvent 類是所有事件類的基類,事件對象包含事件參數。 Qt 的主事件循環(QCoreApplication::exec())從事件隊列中獲取本地窗口系統事件,將它們轉化為 QEvents,然後將轉換後

QtQLabel

不同顏色 map() int ble code 關於 sheet 畫的 fun 簡述 QLabel提供了一個文本或圖像的顯示,沒有提供用戶交互功能。 一個QLab

QT窗口部件及窗口類型

QT 窗口組件 窗口類型 今天我們來繼續學習QT的相關知識,本文的內容是介紹QT的窗口部件及窗口類型。 先說下窗口組件,圖形用戶界面由不同的窗口和窗口組件構成,一般是在<QtGui>中包含,對應Qt中的GUI模塊;Qt以組件對象的方式構建圖形用戶界面;組件的類型分為兩種:1、容器類(父

QT坐標系統

QT 坐標系統 GUI操作系統都有其特定的坐標系統;我們本節要在坐標系統中進行窗口和部件的定位,定位類型分為3種: 1、頂級窗口部件的定位 2、窗口內部件的定位 3、窗口部件的大小設置 Qt 使用同一的坐標系統定位窗口部件的位置和大小;Qt 部件類提供成員函數在坐標系統中進行定

QT創建計算器

QT 計算器 界面 上篇博客說我們要創建一個計算器,那麽下面我們來創建一個計算器的界面,這節只是簡單的開發一個計算器的界面。實現的是一個文本框只能顯示,不能輸入的,界面大小固定的計算器。那麽在開發之前,我們的的QT知識還有所欠缺,對於文本框的顯示,我們沒有相關的知識,我們就先學習下 QLineEd

QT計算器代碼重構

QT 代碼重構 首先我們來講講為什麽要進行代碼重構?在一些大的項目中,代碼重構是一個必不可少的步驟。因為項目大了,代碼也就多了,後期的維護將會很難,所以我們要適當的進行代碼重構,讓代碼的可復用性提高,使軟件的設計和架構更加合理。 代碼實現和代碼重構有什麽不同呢?代碼實現的重點是功能的實現,而代碼重構則

QT消息處理

QT 信號 槽 那麽我們之前學習了計算器的界面制作,但是只是實現了一個計算器的界面,還不具有計算器的功能。 接下來我們就要學習在QT中如何進行消息的處理,比如你按下1鍵之後,QT會如何處理這個信號。QT封裝了具體操作系統的消息機制,同時它遵循經典的 GUI 消息驅動事件模型。QT中定義了與系統消息

QT字符串類

QT 字符串 前面我們講解了開發計算器的信號處理機制,接下來我們來講講關於字符串顯示的問題。 我們都知道 C 語言不支持真正意義上的字符串;C 語言是用字符數組和一組函數來實現字符串操作的;C 語言不支持自定義類型,因此我們無法獲得字符串類型。從 C 到 C++ 的進化過程引入了自定義類型,

QT計算器對四則運算表達式的解析

QT 計算器 解析算法 前面我們已經關於計算器介紹的已經夠多了,那麽它現在還是沒有具備計算的功能。 今天我們來繼續講解計算器的解析算法,那麽對於一個四則運算表達式, 它是如何讀懂的呢?比如:“+9.11 + ( -3 - 1 ) * -5 ”; 人類習慣的數學表達式叫做中綴表達式,還有一種將運