找回密码
 立即注册
收起左侧

关于Qt中QProcess::write的函数

1
回复
8121
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2018-7-17 09:16:04 显示全部楼层 |阅读模式
1Qter豆
关于Qt中QProcess::write的函数问题。
在Qprocess中,写一个小程序,流程是启动cmd.exe控制台,先用write()函数在控制台中写入一个exe(以绝对路径方式,比如E:\\ABC\\123\\Concole.exe,这里用Write()函数写,只能双斜杠,测试单斜杠的路径不行),再用write()函数写一个txt(以同样的方法写,因为txt文件里面是参数,需要同时写入exe与txt文件才能执行)。
1、以下第一种方式可以运行,如下

    QProcess myProcess;
    myProcess.start("cmd.exe"); //start()启动exe文件
    myProcess.write("E:\\ABD\\123\\InSAR_Concole.exe ");
    myProcess.write("E:\\Fc\\Canshu\\TEST.txt\n\r");
    myProcess.waitForFinished();
    myProcess.close();

       
2、我想进一步写一个小工具时,想要改进下,写一个Widget界面,把参数写好保存并运行,然后获取保存后txt的路径,再   用相同的方法write()函数写,这时候就不行了,因为获取的path路径是一个QString类型,用write(paht)函数去写入控制台就会报错,然后我进行如下各种转换也都不行。
************程序开始********************       
   //下面是从文本框获取内容,无报错
void MainWindow:n_pushButton_clicked()
{
    //getSaveFileName()保存路径及文件格式
    QString path = QFileDialog::getSaveFileName(this, "Save File", "../", "TXT(*.txt)");
    if(path.isEmpty() == false)
    {
        QFile file;        //创建文件对象
        file.setFileName(path); //保存文件的名字

        //打开文件,只写的方式
         bool isOk = file.open(QIODevice::WriteOnly);
         //如果打开成功,再进行操作
         if(isOk = true)
         {
             //toPlainText()获取文本编辑区的内容
             QString str = ui->textEdit->toPlainText();
             //写文件
             //QString类型转为QByteArray类型
             file.write(str.toUtf8()); //保存为utf8格式,方便Qt读取

         }
         file.close();


    }
       
        //以下程序会出问题
       
    QFileInfo info(path);
    qDebug()<<"文件路径"<<info.filePath();
    QString path1 = info.filePath();
    qDebug()<<"path1"<<path1;

    //替换路径中的"/",使用replace();函数替换"/"->"\\"
        //会把获取的E:/ABD/123替换为E:\\ABD\\123
    path1.replace("/","\\");

    qDebug()<<"替换后的path1:"<<path1;


    //创建进程,开始执行程序

    myProcess.start("cmd.exe"); //start()启动exe文件
    myProcess.write("E:\\ABD\\123\\InSAR_Concole.exe ");
    myProcess.write(path1);
    myProcess.write("\n\r");
    myProcess.waitForFinished();
    myProcess.close();
        ************程序结束**************
       
    其中用过myProcess.write(path1.toStdString().data()); path1.toUtf8(),path1.toLocal8Bit()等转换写在write函数中都没反应,程序都没有报错。
   其中用qDebug()把转换后的path1都打印了,地址显示正常
        **********************************
        path1 "E:/Qtcode/1.txt"
    替换后的path1: "E:\\Qtcode\\1.txt"
    转换为toUtf8:"E:\\Qtcode\\1.txt"
    转换为toLocal8Bit:"E:\\Qtcode\\1.txt"
    转换为toStdString().data():E:\Qtcode\1.txt
    QString ->QByteArray转换: "E:\\Qtcode\\1.txt"
        **********************************
        第一个程序用write()写路径都正常,第二种用write(path)将路径path写入write()中却出错,在此请教下各位老师!


回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-7-17 14:53:00 显示全部楼层
顶一下,求助哈,想解决往下一步走
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了