我有一个基于Qt GUI的完整应用程序,但现在我需要在批处理模式(控制台)中使用此应用程序。我尝试了几种方法,但没有一个按预期工作。以下是我现在有:将基于Qt GUI的应用程序转换为控制台或批处理应用程序
QApplication a(argc, argv);
MyMainWindow *w = new MyMainWindow();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
a.exec();
以下是我需要:
QApplication a(argc, argv);
QString project_path = argv[1];
MyMainWindow *w = new MyMainWindow();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
w->loadPrjFile(project_path);
w->analyze();
w->exportResults();
a.exec();
所以,基本上我需要的是允许应用程序通过命令行得到project_path(不是文件对话框)并执行用户通常使用GUI所遵循的方法。问题在于这些方法应该阻止,即应该等待前一个结束。
应用程序本身应该阻塞,在shell中执行时,应该等待整个执行完成才能退出。由于它应该作为控制台应用程序工作,所以该界面也应该隐藏起来。
如果你知道如何做到这一点,我真的很感激这样做的代码示例。
简单的方法是使用Qt的各种'waitForXxxx'方法(主要是'QIODevice'子类,记住,他们是在GUI应用馊主意),而不是以往任何时候都调用'EXEC()'。 'QFile'也可以用在像stdin,stdout和stderr这样的FILE指针文件上。或者只是使用标准的C++流等,并根据需要转换为'QString'等。 – hyde
为了澄清我以前的评论,以防万一:这是'waitForXxx'方法,这在GUI应用程序中是一个坏主意,因为它们会阻塞事件循环并导致实际使用中的麻烦,并且可能需要很多工作才能稍后进行修复。 – hyde