chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

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

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-09-09 11:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1. 前言

在QT for Windows 下編程時,經(jīng)常因為一些中文路徑、帶空格的路徑導致一些問題出現(xiàn)。

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

2. _chdir切換帶空格的目錄

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

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

(1)切換失敗的情況

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

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

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

(2)優(yōu)化后-解決問題

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()<<"路徑切換狀態(tài):"<<_chdir(name.c_str()); //切換工作目錄
image-20220418135921641

3. QProcess執(zhí)行-目錄帶中文

QProcess類用于啟動外部程序并與它們通信。
運行進程要啟動進程,請將要運行的程序的名稱和命令行參數(shù)作為參數(shù)傳遞給start()。參數(shù)在QStringList中作為單個字符串提供。
或者,可以將程序設(shè)置為使用setProgram()和setArguments()運行,然后調(diào)用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進入啟動狀態(tài),程序啟動后,QProcess進入運行狀態(tài)并發(fā)出started()。
QProcess允許將進程視為順序I/O設(shè)備??梢韵袷褂肣TcpSocket訪問網(wǎng)絡(luò)連接一樣,對進程進行寫入和讀取。然后可以通過調(diào)用write()寫入進程的標準輸入,并通過調(diào)用read()、readLine()和getChar()讀取標準輸出。因為QProcess繼承了QIODevice,所以它也可以用作QXmlReader的輸入源,或者用于生成要使用QNetworkAccessManager上傳的數(shù)據(jù)。
當進程退出時,QProcess重新進入NotRunning狀態(tài)(初始狀態(tài)),并發(fā)出finished()。
finished()信號提供進程的退出代碼和退出狀態(tài)作為參數(shù),還可以調(diào)用exitCode()來獲取最后一個完成的進程的退出代碼,并調(diào)用exitStatus()來獲取其退出狀態(tài)。如果在任何時間點發(fā)生錯誤,QProcess將發(fā)出ErrorOccursed()信號。還可以調(diào)用error()來查找上次發(fā)生的錯誤類型,調(diào)用state()來查找當前進程狀態(tài)。

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

(1)調(diào)用失敗的情況

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()<<"路徑切換狀態(tài):"<<_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()<;<>
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5152

    文章

    19675

    瀏覽量

    317662
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3614

    瀏覽量

    91431
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    2

    文章

    314

    瀏覽量

    39087
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    USB3.0的識別問

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

    嵌入式軟件開發(fā)常用的軟件有哪些?

    對于初學嵌入式的朋友們,會想要了解嵌入式軟件開發(fā)常用的軟件有些,有什么用。那么看以下常用的軟件介紹。 1.Visual Studio Code 簡稱VSCode:它是一款由微軟開發(fā)且跨
    發(fā)表于 07-03 17:06

    BAT文件無法識別中文路徑

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

    如何解決網(wǎng)絡(luò)無法識別問

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

    【創(chuàng)龍科技TL570x-EVM開發(fā)板試用體驗】TL570x-EVM 的QT軟件開發(fā)

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

    嵌入式軟件開發(fā)

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

    Qt 嵌入式圖形開發(fā)(基礎(chǔ)篇)

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

    ARM嵌入式軟件開發(fā)

    ARM嵌入式軟件開發(fā)ARM嵌入式軟件開發(fā)ARM嵌入式軟件開發(fā)
    發(fā)表于 01-15 17:29 ?65次下載

    Linux軟件開發(fā)環(huán)境

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

    關(guān)于做嵌入式軟件開發(fā)和普通桌面軟件開發(fā)的區(qū)別問

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

    基于模型的嵌入式軟件開發(fā)

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

    汽車軟件開發(fā)流程介紹

    在汽車軟件開發(fā)中,軟件開發(fā)流程是軟件工程的核心,因為它們?yōu)?b class='flag-5'>軟件開發(fā)實踐“提供了一個骨架并確保了它的嚴謹性”。軟件開發(fā)的流程包含“階段”“活動
    發(fā)表于 08-15 12:03 ?1.5w次閱讀

    軟件開發(fā)的流程和方法有哪些?

    軟件開發(fā)是根據(jù)客戶要求構(gòu)建出軟件系統(tǒng)或者系統(tǒng)中的軟件部分,一般是通過程序設(shè)計語言實現(xiàn)的,比如C/C++/JAVA/JSP/ASP等開發(fā)語言。軟件開發(fā)
    的頭像 發(fā)表于 12-27 10:56 ?2400次閱讀
    <b class='flag-5'>軟件開發(fā)</b>的流程和方法有哪些?

    安全軟件開發(fā)的最佳實踐

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

    嵌入式軟件開發(fā)軟件開發(fā)的區(qū)別

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