如何在Linux中为Qt应用程序制作控制台cmd

how to make a console cmd for Qt app in Linux?

本文关键字:控制台 cmd 应用程序 Qt Linux 中为      更新时间:2023-10-16

我在Arch Linux上用Qt制作了一个基本的文本编辑器(称为"Note")!所以我构建了这个项目,并使用installjammer制作了一个安装程序。现在,当我在终端中键入note时,它会打开程序。现在我的问题是:如果我们使用nano、leafpad或mousepad,它会按照文件的路径打开它。例如nano/etc/fstab我如何在我的程序中做到这一点?我需要在安装程序或代码中编辑一些内容吗?帮帮我!请!~谢谢!

您可能需要阅读QCoreApplication的文档。特别是:QStringList QCoreApplication::arguments()

从列表中获取文件名,打开文件。

argv参数直接在main()中或通过QCoreApplication::arguments()获取传递的命令行参数。这是有据可查的,应该很容易。棘手的部分实际上是打开文件。为此,您需要为在您的QApplication实例上调用exec()之后立即运行安排一个插槽。首先,创建一个插槽。例如,如果您正在对QApplication进行子类化,您可以:

class MyApplication: public QApplication {
    Q_OBJECT
    // ...
    private slots:
        void checkCmdLine();
    // ...
};

在MyApplication::checkCmdLine()函数中,您可以从QCoreApplication::arguments()中获取参数,并检查是否传递了文件名。如果是,你打开它。

现在,您需要确保MyApplication::checkCmdLine()将在您对MyApplication调用exec()之后立即运行。您可以在main()函数中使用QMetaObject::invokeMethod()来实现这一点。例如:

int main(int argc, char* argv[])
{
    MyApplication* app = new MyApplication(argc, argv);
    // ...
    QMetaObject::invokeMethod(app, "checkCmdLine", Qt::QueuedConnection);
    app->exec();
    // ...
}

如果您没有对QApplication进行子类化,那么您可以在其他QObject子类中实现slot,并在其上使用QMetaObject::invokeMethod()。