在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

Qt軟件開(kāi)發(fā)_解決中文路徑無(wú)法識(shí)別問(wèn)題

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-09-09 11:36 ? 次閱讀

【摘要】 在QT for Windows 下編程時(shí),經(jīng)常因?yàn)橐恍┲形穆窂健Э崭竦穆窂綄?dǎo)致一些問(wèn)題出現(xiàn)。 目錄無(wú)法打開(kāi)、文件無(wú)法打開(kāi)、程序無(wú)法調(diào)用等等。下面記錄一些出現(xiàn)問(wèn)題的場(chǎng)景,并提供一些解決辦法。

1. 前言

在QT for Windows 下編程時(shí),經(jīng)常因?yàn)橐恍┲形穆窂健Э崭竦穆窂綄?dǎo)致一些問(wèn)題出現(xiàn)。

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

2. _chdir切換帶空格的目錄

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

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

(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)化后-解決問(wèn)題

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

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

QTextCodec *code = QTextCodec::codecForName("GB2312");//解決中文路徑問(wèn)題
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類用于啟動(dòng)外部程序并與它們通信。
運(yùn)行進(jìn)程要啟動(dòng)進(jìn)程,請(qǐng)將要運(yùn)行的程序的名稱和命令行參數(shù)作為參數(shù)傳遞給start()。參數(shù)在QStringList中作為單個(gè)字符串提供。
或者,可以將程序設(shè)置為使用setProgram()和setArguments()運(yùn)行,然后調(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進(jìn)入啟動(dòng)狀態(tài),程序啟動(dòng)后,QProcess進(jìn)入運(yùn)行狀態(tài)并發(fā)出started()。
QProcess允許將進(jìn)程視為順序I/O設(shè)備。可以像使用QTcpSocket訪問(wèn)網(wǎng)絡(luò)連接一樣,對(duì)進(jìn)程進(jìn)行寫(xiě)入和讀取。然后可以通過(guò)調(diào)用write()寫(xiě)入進(jìn)程的標(biāo)準(zhǔn)輸入,并通過(guò)調(diào)用read()、readLine()和getChar()讀取標(biāo)準(zhǔn)輸出。因?yàn)镼Process繼承了QIODevice,所以它也可以用作QXmlReader的輸入源,或者用于生成要使用QNetworkAccessManager上傳的數(shù)據(jù)。
當(dāng)進(jìn)程退出時(shí),QProcess重新進(jìn)入NotRunning狀態(tài)(初始狀態(tài)),并發(fā)出finished()。
finished()信號(hào)提供進(jìn)程的退出代碼和退出狀態(tài)作為參數(shù),還可以調(diào)用exitCode()來(lái)獲取最后一個(gè)完成的進(jìn)程的退出代碼,并調(diào)用exitStatus()來(lái)獲取其退出狀態(tài)。如果在任何時(shí)間點(diǎn)發(fā)生錯(cuò)誤,QProcess將發(fā)出ErrorOccursed()信號(hào)。還可以調(diào)用error()來(lái)查找上次發(fā)生的錯(cuò)誤類型,調(diào)用state()來(lái)查找當(dāng)前進(jìn)程狀態(tài)。

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

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

    關(guān)注

    5087

    文章

    19153

    瀏覽量

    306415
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3553

    瀏覽量

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

    關(guān)注

    1

    文章

    308

    瀏覽量

    37988
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Qt軟件開(kāi)發(fā)-QSettings管理用戶環(huán)境變量(修改、輸出)

    軟件開(kāi)發(fā)中可能有需求修改用戶環(huán)境變量,添加新的值進(jìn)行。比如:添加某些可執(zhí)行文件、某些動(dòng)態(tài)庫(kù)的路徑到系統(tǒng)環(huán)境PATH中,能夠讓可執(zhí)行文件運(yùn)行過(guò)程中可以找到對(duì)應(yīng)的dll。
    的頭像 發(fā)表于 07-14 13:46 ?3249次閱讀
    <b class='flag-5'>Qt</b><b class='flag-5'>軟件開(kāi)發(fā)</b>-QSettings管理用戶環(huán)境變量(修改、輸出)

    USB3.0的識(shí)別問(wèn)

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

    BAT文件無(wú)法識(shí)別中文路徑

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

    如何解決網(wǎng)絡(luò)無(wú)法識(shí)別問(wèn)

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

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

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

    嵌入式軟件開(kāi)發(fā)

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

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

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

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

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

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

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

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

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

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

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

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

    在汽車軟件開(kāi)發(fā)中,軟件開(kāi)發(fā)流程是軟件工程的核心,因?yàn)樗鼈優(yōu)?b class='flag-5'>軟件開(kāi)發(fā)實(shí)踐“提供了一個(gè)骨架并確保了它的嚴(yán)謹(jǐn)性”。軟件開(kāi)發(fā)的流程包含“階段”“活動(dòng)
    發(fā)表于 08-15 12:03 ?1.5w次閱讀

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

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

    安全軟件開(kāi)發(fā)的最佳實(shí)踐

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

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

    嵌入式軟件開(kāi)發(fā)軟件開(kāi)發(fā)是兩個(gè)不同的概念,它們?cè)谝恍╆P(guān)鍵方面有著明顯的區(qū)別。嵌入式軟件開(kāi)發(fā)是指開(kāi)發(fā)嵌入在硬件設(shè)備中的軟件,而
    的頭像 發(fā)表于 01-22 15:27 ?2354次閱讀
    主站蜘蛛池模板: 女人张开双腿让男人桶爽免| 亚洲精品成人网| 欧美69视频在线| 色综合久| 国产午夜一区二区在线观看| 一级特黄视频| 国产综合色在线视频区色吧图片| 色婷亚洲| 全黄毛片| 欧洲精品不卡1卡2卡三卡四卡| 国产深夜福利在线观看网站| 久久国产福利| 欧美1024| 天天干天天玩天天操| freexxxx性欧美| 韩国免费三片在线视频| 国产伦子系列视频6| 黄色网址在线免费观看| 嫩草影院地址一地址二| 激情都市亚洲| 一级特黄aaaaaa大片| aa黄色大片| 俺来也俺去啦久久综合网| 国内精品久久久久影院薰衣草| 成人午夜毛片| 国产美女视频一区二区三区| 77成人| 在线免费午夜视频| 色视频亚洲| 理论毛片| 毛片天天看| 免费观看高清视频| 4480yy私人午夜a级国产| 黄色伊人网| fxxx性xxx性| 亚洲精品卡1卡二卡3卡四卡| 月夜免费观看完整视频| 亚洲最大的成人网| 五月婷婷七月丁香| 五月婷婷视频在线| 久久综合狠狠综合久久综合88|