您的位置:首页 > 编程语言 > Qt开发

Qt调用外部exe并同步显示输出

2016-01-08 09:13 447 查看
之前做过一个用C#同步调用exe并显示输出的程序,最近又想用一个Qt做一下这个工作;相比之下,Qt确实要简单许多。

我参考http://blog.sina.com.cn/s/blog_7243586a0100t2vn.html,很快就做出了一个同步显示的程序。

界面如下:



界面虽然丑,但已经达到了同步输出的目的,一下是其代码地址:链接:http://pan.baidu.com/s/1dEuAmSp 密码:85ip。

但是除此之外,我还想分享一点别的。

一、那就是QString和std::string的问题。

在Qt中参数的传入是使用QStringList,而我在使用VS2010编写exe的时候并没有包含Qt的一些语法格式,所以存在一个两者的转换,这里需要注意的是要将Vs2010自动生成的main函数修改一下。

原主函数:

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}


修改为

int main(int argc, char* argv[])
{
return 0;
}


二、同步输出的中文字符的问题。
在exe中的输出肯定含有中文字符,直接传递到Qt中会出现中文乱码;不过解决的方法也很简单,只需要在示例代码中的on_read()函数中,将

output +=pProces->readAll();


修改为:

output += QString::fromLocal8Bit(pProces->readAll());


就好了。

三、如何使得TextEdit总是保持在最末

在进行文档输出的时候,TextEdit中的内容会不断增加。此时,滚动条的默认都是保持在最上方。但是我们为了使得其更加正常,我们应让滚动条保持在文章的最后。

解决方法是添加一个SLOT:

void Widget::move_to_end()

{

ui->textEdit_log->moveCursor(QTextCursor::End);

}

当TextEdit中的内容发生变化后,可以用connect进行关联即可保持TextEdit的滚动条总是在文章的最末尾。

四、如何让界面程序带参数启动

这个问题看起来复杂,其实只要在main函数中设置argv即可,最后利用一些set函数即可让界面程序启动带参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: