0

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

4

2 回答 2

1

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

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

于 2013-08-16T17:06:44.103 回答
0

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

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

    private slots:
        void checkCmdLine();

    // ...
};

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

现在您需要确保 MyApplication::checkCmdLine() 在您对 MyApplication 调用 exec() 后立即运行。您可以使用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() 代替。

于 2013-08-16T17:45:46.020 回答