恢复或带来Qt桌面应用程序

时间:2015-05-13 09:31:39

标签: c++ qt singleton

我已经使用在此SO问题上找到的RunGuard代码将我的应用程序转换为单个实例应用程序:

Qt: Best practice for a single instance app protection

我想要做的是当用户尝试启动应用程序时,一个正在运行的应用程序是将现有正在运行的应用程序放在前面,如果最小化,则恢复它。

在我的Delphi Windows编程时代,我曾经在关闭它之前从新应用程序广播Windows消息。现有的应用程序将收到此并恢复自身并走到前面。

Windows和Linux平台上的Qt是否可以这样?

3 个答案:

答案 0 :(得分:1)

QtSingleApplication有什么特别的问题吗?它应该足以满足您的需求,并使您能够向正在运行的应用程序发送消息。你只需要一个插槽来获取该消息,如果它符合你的期望,那么你就可以恢复它。

http://doc.qt.digia.com/solutions/4/qtsingleapplication/qtsingleapplication-example-trivial.html

  

logview对象也被设置为应用程序的激活窗口。每次收到消息时,窗口都会自动升起并激活。

答案 1 :(得分:0)

出于某种原因,setActivationWindow()activateWindow()对我不起作用。这是我的解决方法:

#include <QWidget>
#include <qtsingleapplication.h>

class Window : public QWidget
{
    Q_OBJECT
public:
    Window(QWidget *parent = 0) : QWidget(parent) {}

public slots:
    void readMessage(const QString &str) { showNormal(); }
};

int main(int argc, char *argv[])
{
    QtSingleApplication instance(argc, argv);
    Window *window = new Window;
    window->show();

    QObject::connect(&instance, SIGNAL(messageReceived(const QString &)), window, SLOT(readMessage(const QString &)));

    if (instance.sendMessage(""))
        return 0;

    return instance.exec();
}

#include "main.moc"

答案 2 :(得分:0)

通常,没有IPC就不可能。 QtSingleApplication提供此类IPC,但您将从QtNetwork模块获得额外的依赖性。 (正如@svlasov回答的那样)

您将遇到的第一个问题:如果此应用程序不是前台,则无法引发任何应用程序窗口。对于Windows和OS X,有solutions,如何强制提升窗口。