今天在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構造前對參數進行處理。