之前做过一个用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函数即可让界面程序启动带参数。