mac os中使用url scheme喚起qt程序並獲取啓動參數

網上查找到的資料大多是在xcode中設置如何被url scheme喚起並獲取啓動參數,qt creator的基本查不到,所以寫下這篇文章。
url scheme是一門比較實用的技術,例如電腦在瀏覽器中輸入"qq://"即可打開qq。並且可以在url後面增加參數,以便讓程序在啓動後獲取這些參數並處理事件。
先將release下的app打包,然後編輯包裏面的info.plist文件。
增加以下內容:

<key>CFBundleURLTypes</key>
<array>
	<dict>
		<key>CFBundleTypeRole</key>
		<string>Editor</string>
		<key>CFBundleURLName</key>
		<string>testabc url</string>
		<key>CFBundleURLSchemes</key>
		<array>
			<string>testabc</string>
		</array>
	</dict>
</array>

其中有兩個"testabc",即url scheme前綴,可根據需求替換成自己的前綴。
將app拷貝到“應用程序”中。
這時在瀏覽器輸入"testabc://“即可打開軟件。
如果同時還需要獲取url後面的參數,如"testabc://?name=xiaoming&age=10”,則新建一個頭文件:

#ifndef OPENEVENTFILTER_H
#define OPENEVENTFILTER_H
#include <QFileOpenEvent>
#include <QMessageBox>
class OpenEventFilter : public QObject
{
public:
    bool eventFilter(QObject* obj, QEvent* event)
    {
    	bool result=false;
        if (event->type() == QEvent::FileOpen)
        {            
            QFileOpenEvent* fileEvent = static_cast<QFileOpenEvent*>(event);
            if (!fileEvent->url().isEmpty())
            {                                
                QString url = fileEvent->url().toString();
                QMessageBox::information(nullptr, "完整url scheme", url,"確定");            
            }
            result=true;
        }
        else
        {
            result = QObject::eventFilter(obj, event);
        }
        return result;
    }
};
#endif // APPLICATIONCUSTOM_H

之後在main函數中引入這個頭文件,並且插入以下語句:

OpenEventFilter *openEventFilter= new OpenEventFilter;
a.installEventFilter(openEventFilter);//這個變量a是默認生成的QApplication a(argc, argv)

依然打包、修改info.plist、拷貝到“應用程序”中,之後在瀏覽器打開"testabc://?name=xiaoming&age=10",就會看到程序被啓動,並且彈出帶有完整url的對話框。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章