日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

macOS上实现Qt应用程序做文件关联打开

發(fā)布時(shí)間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 macOS上实现Qt应用程序做文件关联打开 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、背景介紹

? ? 用Qt開發(fā)的應(yīng)用程序要實(shí)現(xiàn)文件關(guān)聯(lián),雙擊時(shí)用默認(rèn)關(guān)聯(lián)的程序打開文件,在Windows上這個(gè)功能非常容易實(shí)現(xiàn)。Windows應(yīng)用程序在安裝的時(shí)候可以在注冊(cè)表中寫入相關(guān)的鍵值對(duì)。打開文件的時(shí)候,Windows Explorer會(huì)將文件完整的路徑作為參數(shù)傳遞給關(guān)聯(lián)的應(yīng)用程序。這樣就可以在啟動(dòng)程序后將這個(gè)文件作為目標(biāo)進(jìn)行處理。

? ? ?如上述代碼所示,接著我們就可以在main函數(shù)的argv中獲取到文件路徑,完成文件的關(guān)聯(lián)打開。但是在macOS上卻不是這么做的。首先macOS上沒有類似Windows注冊(cè)表,不會(huì)寫入這些信息;其次,macOS上常見的安裝包格式pkg也不提供這些功能。那么,在macOS上我們應(yīng)該怎么來實(shí)現(xiàn)這樣的功能呢?我們馬上來看看。

? ? 首先,要實(shí)現(xiàn)雙擊用關(guān)聯(lián)程序打開文件這個(gè)功能,要分兩個(gè)步驟:(1)通過某種方式來聲明我們的應(yīng)用程序支持哪些文檔類型;(2)要接收從窗口管理系統(tǒng)傳遞過來的文件路徑。滿足了這兩點(diǎn),才能正常實(shí)現(xiàn)目標(biāo)功能。

(1)文件格式關(guān)聯(lián)聲明

? ? 在macOS上,每個(gè)應(yīng)用程序里面都會(huì)包含一個(gè)info.plist文件。這個(gè)文件以XML格式來組織一些鍵值對(duì)。每個(gè)鍵值對(duì)都包含聲明了一個(gè)特定的信息,如版本號(hào)、文檔類型、簽名信息和標(biāo)識(shí)符等。應(yīng)用程序支持哪些文檔格式也是在這個(gè)文件里面進(jìn)行聲明的。

? ? 可以看到,這個(gè)info.plist文件里面我們添加了三種文檔格式。每當(dāng)嘗試使用應(yīng)用程序來打開一個(gè)文檔時(shí),都會(huì)根據(jù)這些信息來確定是否支持打開。

(2)接收目標(biāo)文檔路徑

? ? 在macOS上打開一個(gè)文檔時(shí),macOS Finder不會(huì)像Windows Explorer一樣將文件名作為關(guān)聯(lián)程序的啟動(dòng)參數(shù)。我們測(cè)試的時(shí)候也可以發(fā)現(xiàn),程序啟動(dòng)的時(shí)候main函數(shù)的argc參數(shù)值永遠(yuǎn)是1,除了程序名之外不會(huì)有其他參數(shù)存在。事實(shí)上,在macOS上我們用Qt開發(fā)的程序可以監(jiān)聽QFileOpenEvent這樣一個(gè)事件,來實(shí)現(xiàn)對(duì)文件路徑的捕獲。

? ? 在Qt文檔中我們可以看到這樣一個(gè)示例:

1 #include <QApplication> 2 #include <QFileOpenEvent> 3 #include <QtDebug> 4 5 class MyApplication : public QApplication 6 { 7 public: 8 MyApplication(int &argc, char **argv) 9 : QApplication(argc, argv) 10 { 11 } 12 13 bool event(QEvent *event) 14 { 15 if (event->type() == QEvent::FileOpen) { 16 QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(event); 17 qDebug() << "Open file" << openEvent->file(); 18 } 19 20 return QApplication::event(event); 21 } 22 };

? ? 示例中繼承了QApplication類,并在event函數(shù)中處理了QFileOpenEvent事件。這個(gè)事件可以直接獲取到正在打開的文件名和文件路徑,也就實(shí)現(xiàn)了我們的目的了。這里我們?cè)赒Application里面處理了這個(gè)事件,根據(jù)需要我們也可以將這個(gè)文件路徑傳到主窗口類中進(jìn)行后續(xù)的打開操作。至此,結(jié)合上面的這方面的設(shè)置,我們這個(gè)功能就完成了。

?二、參考鏈接

1. https://forum.qt.io/topic/80205/open-file-with-double-click-on-mac/8
2. https://stackoverflow.com/questions/26849866/unable-to-open-file-with-qt-app-on-mac
3. https://doc.qt.io/qt-5/qfileopenevent.html?

轉(zhuǎn)載于:https://www.cnblogs.com/csuftzzk/p/qt_macos_file_association_open.html

總結(jié)

以上是生活随笔為你收集整理的macOS上实现Qt应用程序做文件关联打开的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产嘿咻| 懂色av| 亚洲三级在线免费观看 | 99re视频这里只有精品 | 欧美激情一区二区三级高清视频 | 97超碰人人网| 欧美三区在线 | 成人黄色动漫在线观看 | www在线观看国产 | www.狠狠干 | 深夜福利在线免费观看 | 欧美日韩国产一区二区 | 亚洲色图3p| 久久精品99久久 | 欧美日韩国产一区二区三区 | 中文字幕在线视频精品 | 色爱色 | www色综合| 96国产精品 | 一个人看的毛片 | 一级大片视频 | av中文在线观看 | 色噜噜狠狠狠综合曰曰曰88av | 1024国产精品| 日韩精品在线播放 | 亚洲色图一区二区 | 日本美女毛片 | 欧美成年人视频在线观看 | www色中色 | 精品国产视频一区二区三区 | 国产ts系列 | 国产美女91呻吟求 | 在线一本| 色婷婷综合久久久久中文字幕 | www.youjizz.com在线观看 | 国产探花在线精品一区二区 | 国产伦精品一区二区三区免.费 | 黄色综合网站 | 成年人性生活免费视频 | 亚洲黄色视屏 | 久久精品视频一区二区三区 | 欧美性猛交99久久久久99按摩 | 色婷婷九月 | 毛片一级在线观看 | 欧美性猛交xxxx黑人猛交 | 岛国伊人| 日韩一区中文 | 日韩成人精品在线观看 | 奇米影视首页 | 中文字幕一区二区精品 | 久久久久高清 | 韩国日本中文字幕 | 成人理论视频 | 美女视频在线免费观看 | 欧美日韩精品一区二区三区视频播放 | 又色又爽又黄18网站 | 欧美 国产 综合 | 日本成人免费视频 | av福利在线 | 国产精品xxx在线 | 岳奶大又白下面又肥又黑水多 | 日本xx视频 | 少妇又色又紧又爽又刺激视频 | 中文字幕乱码中文乱码777 | 2018自拍偷拍 | 伊人网综合视频 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 成人一级片在线观看 | 国产女人高潮视频 | 日日夜夜天天干 | 色偷偷免费视频 | 三上悠亚在线一区二区 | 久久爱资源网 | 97在线观视频免费观看 | 日本一二三区视频 | 日本精品视频一区 | 久久久久国产一区二区三区潘金莲 | 精品欧美激情精品一区 | 欧美变态口味重另类在线视频 | 2020自拍偷拍 | 一本大道久久a久久精二百 琪琪色在线视频 | 国产三级视频在线 | 凹凸精品一区二区三区 | 2021亚洲天堂 | 波多野结衣在线观看一区二区三区 | 丁香午夜| 国产成年人网站 | 99爱视频在线 | 天天天天 | 国产精品一级无码 | 亚洲精品欧洲精品 | 日韩污视频在线观看 | 欧美性生交片4 | 五月天丁香视频 | av播放网站 | 花样视频污 | 精东传媒在线观看 | 欧美另类69xxxx | 国产剧情在线视频 |