gpt4 book ai didi

qt - 将基于 Qt GUI 的应用程序转换为控制台或批处理应用程序

转载 作者:行者123 更新时间:2023-12-04 21:56:05 32 4
gpt4 key购买 nike

我有一个基于 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 中执行时,它应该在退出之前等待整个执行完成。因为它应该作为控制台应用程序工作,所以界面也应该被隐藏。

如果您知道如何做到这一点,我将不胜感激有关如何完成此操作的代码示例。

最佳答案

您遇到的问题是您正在尝试开发控制台应用程序,但仍在使用 Gui 小部件,例如 QMainWindow。您需要首先将 Gui 类与主项目中的其他所有类分开。

我建议你创建一个类,派生自QObject,它处理你需要的处理;加载Prj文件,分析并导出结果。

然后在您的 MainWindow 中为 GUI 项目使用这个新类的实例,并直接将其用于控制​​台项目。

class Worker : public QObject
{
Q_OBJECT

public:
void loadPrjFile(const QString& path);
void analyze();
void exportResults();
};


class MyMainWindow : QMainWindow
{
private:
Worker m_pWorkerObject;
};

如果您正在开发不需要 Gui 的控制台项目,您可以使用 QCoreApplication ,而不是 QApplication。

请注意,调用 app.exec() 会启动 Qt 处理消息,因此只有在需要消息循环来处理事件时才需要调用它,控制台应用程序可能不是这种情况,具体取决于您的应用程序的功能。

关于qt - 将基于 Qt GUI 的应用程序转换为控制台或批处理应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568906/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com