Вы не можете использовать функцию connect
для подключения к разным слотам на основе заданного значения. Однако вы можете просто вызвать функции на основе значения, проверив значение в лямбде.
По крайней мере, вы могли бы, если бы у вас был сигнал. Однако ваше соединение предполагает, что w
является - или наследует - QWindow. Очевидно, вы можете подключаться только к сигналам, предоставляемым вашим классом. Поскольку ваш Renderer является QWidget, вы должны проверить этот класс.
Документация QWidget сообщает нам, что сигнала windowStateChanged нет, но в нем указано:
Когда состояние окна изменяется, виджет получает changeEvent () типа 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();
}