如何检查应用程序是否已最小化
How to check if the application has been minimized
每当应用程序 window 被最小化或最大化时,我想 link 那个带有函数的信号。
这是代码。
int main(int argc, char *argv[])
{
QApplication application(argc, argv);
Renderer w(model ); // This is QWidget
w.show();
QObject::connect(&w, &QWindow::windowStateChanged, [&](Qt::WindowState state) {
});
// how will i define the QObject::connect
return application.exec();
}
QObject::connect 函数的参数是什么?
您不能使用 connect
函数根据给定值连接到不同的插槽。但是,您可以通过检查 lambda 中的值来简单地根据值调用函数。
至少,如果你有信号,你可以。但是,您的连接表明 w
是 - 或继承 - QWindow。您显然只能连接到 class 提供的信号。由于您的渲染器是 QWidget,因此您必须检查 class.
documentation of QWidget 告诉我们,没有 windowStateChanged 信号,但它指出:
When the window state changes, the widget receives a changeEvent() of type QEvent::WindowStateChange.
因此我们可以创建自己的信号并连接到它。这看起来类似于以下工作示例:
#ifndef RENDERER_H
#define RENDERER_H
#include <QWidget>
#include <QEvent>
class Renderer : public QWidget {
Q_OBJECT
signals:
void stateChanged(bool isMaximized);
protected:
void changeEvent(QEvent *e)
{
if(e->type() == QEvent::WindowStateChange) {
emit stateChanged(windowState() & ~Qt::WindowMaximized);
}
QWidget::changeEvent(e);
}
};
#endif // RENDERER_H
int main(int argc, char *argv[])
{
QApplication application(argc, argv);
Renderer w; // This is QWidget
w.show();
QObject::connect(&w, &Renderer::stateChanged, [&](bool maximized) {
qDebug() << "Maximized?" << maximized;
});
return application.exec();
}
我可以使用 QApplication::focusWindow()
来解决
int main(int argc, char *argv[])
{
QApplication application(argc, argv);
Renderer w; // This is QWidget
w.show();
QObject::connect(QApplication::focusWindow(), &Renderer::stateChanged, [&](bool maximized) {
qDebug() << "Maximized?" << maximized;
});
return application.exec();
}
每当应用程序 window 被最小化或最大化时,我想 link 那个带有函数的信号。
这是代码。
int main(int argc, char *argv[])
{
QApplication application(argc, argv);
Renderer w(model ); // This is QWidget
w.show();
QObject::connect(&w, &QWindow::windowStateChanged, [&](Qt::WindowState state) {
});
// how will i define the QObject::connect
return application.exec();
}
QObject::connect 函数的参数是什么?
您不能使用 connect
函数根据给定值连接到不同的插槽。但是,您可以通过检查 lambda 中的值来简单地根据值调用函数。
至少,如果你有信号,你可以。但是,您的连接表明 w
是 - 或继承 - QWindow。您显然只能连接到 class 提供的信号。由于您的渲染器是 QWidget,因此您必须检查 class.
documentation of QWidget 告诉我们,没有 windowStateChanged 信号,但它指出:
When the window state changes, the widget receives a changeEvent() of type QEvent::WindowStateChange.
因此我们可以创建自己的信号并连接到它。这看起来类似于以下工作示例:
#ifndef RENDERER_H
#define RENDERER_H
#include <QWidget>
#include <QEvent>
class Renderer : public QWidget {
Q_OBJECT
signals:
void stateChanged(bool isMaximized);
protected:
void changeEvent(QEvent *e)
{
if(e->type() == QEvent::WindowStateChange) {
emit stateChanged(windowState() & ~Qt::WindowMaximized);
}
QWidget::changeEvent(e);
}
};
#endif // RENDERER_H
int main(int argc, char *argv[])
{
QApplication application(argc, argv);
Renderer w; // This is QWidget
w.show();
QObject::connect(&w, &Renderer::stateChanged, [&](bool maximized) {
qDebug() << "Maximized?" << maximized;
});
return application.exec();
}
我可以使用 QApplication::focusWindow()
来解决int main(int argc, char *argv[])
{
QApplication application(argc, argv);
Renderer w; // This is QWidget
w.show();
QObject::connect(QApplication::focusWindow(), &Renderer::stateChanged, [&](bool maximized) {
qDebug() << "Maximized?" << maximized;
});
return application.exec();
}