还原或带到前QT桌面应用程序

Restoring or bringing to front Qt desktop application

本文关键字:QT 桌面 应用程序 还原      更新时间:2023-10-16

我使用此问题上的runguard代码将我的应用程序制作到一个实例应用程序中:

QT:单个实例应用程序保护的最佳实践

我想做的是当用户试图在运行时启动应用程序时,将现有的运行应用程序带到前面,如果最小化,请还原。

在我的Delphi Windows编程日中,我曾经在关闭新应用程序之前从新应用程序中广播Windows消息。现有的应用程序将收到并恢复自身并进入前线。

Windows和Linux平台上的QT是可能的吗?

您在qtsingleaplication上有任何特定的麻烦吗?这应该足以满足您想要的内容,并使您可以向运行应用程序发送消息。您只需要一个插槽即可获取该消息,如果它与您的期望匹配,则可以还原。

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

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

出于某种原因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"

常见,没有IPC。QtSingleApplication提供了这样的IPC,但是您将从QTNetwork模块中获得额外的依赖性。(如@svlasov所回答)

您将遇到的第一个问题:如果此应用程序不是前景,则无法提出任何应用程序窗口。有针对Windows和OS X的解决方案,如何强制Windows升高。