我想知道如何将命令行参数传递给已打开的程序。因此用户运行“backup.exe -job awef”并且backup.exe识别出已经打开的进程并将参数传递给已经打开的进程,以便用户可以命令程序从命令行或快捷方式执行他们想要的操作在窗户。 谢谢!
答案 0 :(得分:1)
根据https://doc.qt.io/archives/qtextended4.4/qtopiadesktop/qtsingleapplication.html#QtSingleApplication
,您可以使用处理messageReceived上的命令行参数的QtSingleApplication来实现目标在应用程序开始时,您需要检查是否可以使用命令行参数sendMessage到已运行的实例,然后退出。否则,您将继续启动您的应用,如下所示
int main(int argc, char* argv[])
{
QtSingleApplication app("MySingleInstance", argc, argv);
// try to send commandline arguments
if(app.sendMessage(app.arguments().join("$")))
{
return 0;
}
/* connect your messageRecieved signal to slot
SomeClass::slotLoadCommandLine to be able to handle
the commandline arguments from sendMessage*/
QObject::connect(qApp, SIGNAL(messageReceived(QString)),
SomeClass, SLOT(slotLoadCommandLine(QString)));
//start your application
return app.exec();
}
修改强>
上面的解决方案适用于Qt4,如果您使用的是Qt5,则需要使用 而不是单一应用程序
https://forum.qt.io/topic/22460/solved-qtsingleapplication-and-qt-5/5
另一种选择可能是使用套接字(例如QTcpSocket)。但是您需要创建另一个转发命令行参数的应用程序。请参阅此示例http://www.bogotobogo.com/Qt/Qt5_QTcpSocket_Signals_Slots.php
答案 1 :(得分:0)
可以使用QT 5的修补QtSingleApplication库,如下所述: https://forum.qt.io/topic/71778/what-happened-to-qtsingleapplication