如何在Linux中为Qt应用程序制作控制台命令?

时间:2013-08-16 16:58:58

标签: c++ linux qt qt5

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

2 个答案:

答案 0 :(得分:1)

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

从此ist获取文件名,打开文件。

答案 1 :(得分:0)

直接在argv参数的main()中或通过QCoreApplication :: arguments()获取传递的命令行参数。 This is well documented并且应该相当容易。棘手的部分实际上是打开文件。为此,您需要在QApplication实例上调用exec()后立即安排一个插槽。首先,创建一个插槽。例如,如果您是QApplication的子类,则可以:

class MyApplication: public QApplication {
    Q_OBJECT
    // ...

    private slots:
        void checkCmdLine();

    // ...
};

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

现在,您需要确保在MyApplication上调用exec()后立即运行MyApplication :: checkCmdLine()。您可以使用QMetaObject::invokeMethod()在main()函数中执行此操作。例如:

int main(int argc, char* argv[])
{
    MyApplication* app = new MyApplication(argc, argv);
    // ...

    QMetaObject::invokeMethod(app, "checkCmdLine", Qt::QueuedConnection);
    app->exec();
    // ...
}

如果您没有继承QApplication,那么您可以在其他QObject子类中实现该槽,并在其上使用QMetaObject :: invokeMethod()。