今天在Linux下开发Qt界面程序时发现一个奇怪的问题,程序执行如下命令却会打印日志和弹出对话框
./test -name xxx
代码如下:
#include <QApplication>
#include <QMessageBox>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if(argc != 3 || strcmp(argv[1], "-name") != 0)
{
qDebug() << "param not right!";
QMessageBox::warning(NULL, "提示", QString("命令行格式:./test -name 姓名"));
return -1;
}
...
return 0;
}
在Windows上是不会进入if判断的,但在Linux下却会进入到if判断内。通过添加打印信息:
...
qDebug() << "1.argc=" << argc;
QApplication a(argc, argv);
qDebug() << "2.argc=" << argc;
if(argc != 3 || strcmp(argv[1], "-name") != 0)
...
Linux下输出结果是:
1.argc=3
2.argc=1
Windows下输出结果是:
1.argc=3
2.argc=3
这是为啥?问题肯定出在QApplication构造函数里。通过在百度里搜索“Qt QApplication 默认参数 -name”发现一篇文章提到了如下内容:
原来是X11的命令行默认处理了"-name"参数,在此记录一下在Linux下进行Qt (Qt 4,没有验证Qt5是否存在此问题)开发时,注意避免传入参数与X11命令行选项冲突或者在QApplication构造前对参数进行处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)