精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Qt軟件開發_解決中文路徑無法識別問題

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-09-09 11:36 ? 次閱讀

【摘要】 在QT for Windows 下編程時,經常因為一些中文路徑、帶空格的路徑導致一些問題出現。 目錄無法打開、文件無法打開、程序無法調用等等。下面記錄一些出現問題的場景,并提供一些解決辦法。

1. 前言

在QT for Windows 下編程時,經常因為一些中文路徑、帶空格的路徑導致一些問題出現。

目錄無法打開、文件無法打開、程序無法調用等等。下面記錄一些出現問題的場景,并提供一些解決辦法。

2. _chdir切換帶空格的目錄

chdir 是C語言中的一個系統調用函數(同cd),用于改變當前工作目錄,其參數為Path 目標目錄,可以是絕對目錄或相對目錄。

在Qt里調用_chdir函數切換當前工作目錄時,如果目錄有空格或者中文會導致路徑切換失敗。

(1)切換失敗的情況

//切換路徑
void MainWindow::on_pushButton_clicked()
{
    QString strAppPath ="D:\\360安全瀏覽器下載";

    qDebug() << "strAppPath:" << strAppPath;

    QByteArray utf8_array = strAppPath.toUtf8();
    qDebug()<<"路徑切換狀態:"<<_chdir(utf8_array.data()); //切換工作目錄
    //切換失敗:
    //路徑切換狀態: -1
}
image-20220418103611311

(2)優化后-解決問題

QString strAppPath ="D:/360安全瀏覽器下載"; 

qDebug() << "strAppPath:" << strAppPath;

QTextCodec *code = QTextCodec::codecForName("GB2312");//解決中文路徑問題
std::string name = code->fromUnicode(strAppPath).data();

QByteArray utf8_array = name.c_str();
qDebug()<<"路徑切換狀態:"<<_chdir(name.c_str()); //切換工作目錄
image-20220418135921641

3. QProcess執行-目錄帶中文

QProcess類用于啟動外部程序并與它們通信。
運行進程要啟動進程,請將要運行的程序的名稱和命令行參數作為參數傳遞給start()。參數在QStringList中作為單個字符串提供。
或者,可以將程序設置為使用setProgram()和setArguments()運行,然后調用start()或open()。
      QObject *parent;
      ...
      QString program = "./path/to/Qt/examples/widgets/analogclock";
      QStringList arguments;
      arguments << "-style" << "fusion";

      QProcess *myProcess = new QProcess(parent);
      myProcess->start(program, arguments);
然后,QProcess進入啟動狀態,程序啟動后,QProcess進入運行狀態并發出started()。
QProcess允許將進程視為順序I/O設備。可以像使用QTcpSocket訪問網絡連接一樣,對進程進行寫入和讀取。然后可以通過調用write()寫入進程的標準輸入,并通過調用read()、readLine()和getChar()讀取標準輸出。因為QProcess繼承了QIODevice,所以它也可以用作QXmlReader的輸入源,或者用于生成要使用QNetworkAccessManager上傳的數據。
當進程退出時,QProcess重新進入NotRunning狀態(初始狀態),并發出finished()。
finished()信號提供進程的退出代碼和退出狀態作為參數,還可以調用exitCode()來獲取最后一個完成的進程的退出代碼,并調用exitStatus()來獲取其退出狀態。如果在任何時間點發生錯誤,QProcess將發出ErrorOccursed()信號。還可以調用error()來查找上次發生的錯誤類型,調用state()來查找當前進程狀態。

使用QProcess調用啟動指定的應用程序,如果這個應用程序在中文路徑下。直接使用QProcess 調用會失敗,就就算使用QProcess設置工作路徑也沒有用,必須切換到應用程序所在的目錄下,然后使用相對路徑運行。

(1)調用失敗的情況

QProcess process;
process.start("D:\\linux-share-dir\\我是中文路徑\\Program Files\\Release\\ff_video.exe -v quiet -of json -i D:/汽車零件裝配.MP4  -show_streams");
process.waitForFinished();
process.waitForReadyRead();
QByteArray qba  = process.readAll();
qDebug()<;>

(2)切換目錄解決-_chdir

QString strAppPath ="D:\\linux-share-dir\\我是中文路徑\\Program Files\\Release\";

qDebug() << "strAppPath:" << strAppPath;

QTextCodec *code = QTextCodec::codecForName("GB2312");//解決中文路徑問題
std::string name = code->fromUnicode(strAppPath).data();

QByteArray utf8_array = name.c_str();
qDebug()<<"路徑切換狀態:"<<_chdir(name.c_str()); //切換工作目錄

QProcess process;
process.start("ff_video.exe -v quiet -of json -i \"D:/汽車零件裝配.MP4\"  -show_streams");
process.waitForFinished();
process.waitForReadyRead();
QByteArray qba  = process.readAll();
qDebug()<;>

(3)切換目錄解決-QDir

QDir::setCurrent("D:\\linux-share-dir\\我是中文路徑\\Program Files\\Release\");
QProcess process;
process.start("ff_video.exe -v quiet -of json -i "D:/汽車零件裝配.MP4"  -show_streams");
process.waitForFinished();
process.waitForReadyRead();
QByteArray qba  = process.readAll();
qDebug()<;<>
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5069

    文章

    19021

    瀏覽量

    303375
  • WINDOWS
    +關注

    關注

    3

    文章

    3524

    瀏覽量

    88437
  • Qt
    Qt
    +關注

    關注

    1

    文章

    301

    瀏覽量

    37834
收藏 人收藏

    評論

    相關推薦

    Qt軟件開發-QSettings管理用戶環境變量(修改、輸出)

    軟件開發中可能有需求修改用戶環境變量,添加新的值進行。比如:添加某些可執行文件、某些動態庫的路徑到系統環境PATH中,能夠讓可執行文件運行過程中可以找到對應的dll。
    的頭像 發表于 07-14 13:46 ?2899次閱讀
    <b class='flag-5'>Qt</b><b class='flag-5'>軟件開發</b>-QSettings管理用戶環境變量(修改、輸出)

    USB3.0的識別問

    做了一個USB3.0集線器,現在遇到這個問題,USB3.0無法識別,插拔幾次后可以識別,接上其他設備也能正常工作,求高手幫忙啊,怎么處理USB3.0識別問
    發表于 10-29 11:36

    BAT文件無法識別中文路徑

    文件無法識別中文路徑。它只會出現在舊版本中。誰能告訴我什么時候解決。感謝您的回復!以上來自于谷歌翻譯以下為原文OS: Windows XP Professional Chinese
    發表于 11-16 11:43

    如何解決網絡無法識別問

    網絡問題分類網絡無法識別問題還是比較好排查,但是如果涉及到網絡丟包牽扯的環節太多了比如交換芯片是否異常,對方的工作模式是否正常、網絡隔離變壓器是否正常、CPU占用率、設備中斷影響先排除網絡環境和對方設備、在確認設備問題比如phy的時鐘是否重疊、phy的流控是否開啟等等..
    發表于 12-23 06:08

    【創龍科技TL570x-EVM開發板試用體驗】TL570x-EVM 的QT軟件開發

    創龍TL5708-EVM QT軟件開發 作者:大信 8125036 通過對創龍TL5708初步使用體驗后,開始著手更進一步的進行軟件開發,以便充分發揮板子的強大功能。首先建立開發板的主
    發表于 06-13 17:13

    嵌入式軟件開發

    嵌入式軟件開發,小家電,esp32視覺,esp8266物聯網,各種2G\\4G物聯網產品開發,C\\C++\\C#,QT上位機開發,有需要的老板可以加我微,18802689896
    發表于 09-05 14:13

    Qt 嵌入式圖形開發(基礎篇)

    Qt是一個支持多操作系統的應用開發框架,它使用的c++語言。Qt最初主要為跨平臺的軟件開發提供平臺。
    發表于 05-25 16:55 ?123次下載
    <b class='flag-5'>Qt</b> 嵌入式圖形<b class='flag-5'>開發</b>(基礎篇)

    ARM嵌入式軟件開發

    ARM嵌入式軟件開發ARM嵌入式軟件開發ARM嵌入式軟件開發
    發表于 01-15 17:29 ?64次下載

    Linux軟件開發環境

    Linux軟件開發環境介紹。
    發表于 03-25 15:46 ?7次下載
    Linux<b class='flag-5'>軟件開發</b>環境

    關于做嵌入式軟件開發和普通桌面軟件開發的區別問

    前幾天別人問我做嵌入式開發和普通桌面開發有什么區別,當時回答的不全面,今天來總結一下:嵌入式開發在宿主機上編輯、編譯程序,在目標機運行測試程序,稱為交叉開發;普通桌面
    發表于 10-21 10:06 ?4次下載
    關于做嵌入式<b class='flag-5'>軟件開發</b>和普通桌面<b class='flag-5'>軟件開發</b>的區<b class='flag-5'>別問</b>題

    基于模型的嵌入式軟件開發

    對工具的分類和資質審核通過認證的方式發放證書應對復雜系統時,軟件開發人員的工作效率在降低解決復雜軟件開發效率低下的路徑:模塊化開發 (一個復雜的系統包含很多模塊,每個模塊都比較簡單,這
    發表于 11-03 11:21 ?9次下載
    基于模型的嵌入式<b class='flag-5'>軟件開發</b>

    汽車軟件開發流程介紹

    在汽車軟件開發中,軟件開發流程是軟件工程的核心,因為它們為軟件開發實踐“提供了一個骨架并確保了它的嚴謹性”。軟件開發的流程包含“階段”“活動
    發表于 08-15 12:03 ?1.4w次閱讀

    軟件開發的流程和方法有哪些?

    軟件開發是根據客戶要求構建出軟件系統或者系統中的軟件部分,一般是通過程序設計語言實現的,比如C/C++/JAVA/JSP/ASP等開發語言。軟件開發
    的頭像 發表于 12-27 10:56 ?2072次閱讀
    <b class='flag-5'>軟件開發</b>的流程和方法有哪些?

    安全軟件開發的最佳實踐

    安全的軟件開發最佳實踐是必要的,因為安全風險無處不在。在網絡攻擊盛行的時代,它們可以影響每個人,包括個人、公司和政府。因此,確保軟件開發的安全性至關重要。 在這里,我們將解釋了什么是安全軟件,如何確保
    的頭像 發表于 05-08 10:51 ?793次閱讀
    安全<b class='flag-5'>軟件開發</b>的最佳實踐

    嵌入式軟件開發軟件開發的區別

    嵌入式軟件開發軟件開發是兩個不同的概念,它們在一些關鍵方面有著明顯的區別。嵌入式軟件開發是指開發嵌入在硬件設備中的軟件,而
    的頭像 發表于 01-22 15:27 ?2179次閱讀