網上查找到的資料大多是在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的對話框。