setWindowState из QMainWindow из QWidget

У меня есть приложение QMainWindow, которое также включает QStackedWidget.
Например, страницы QstackedWidget превращаются в пользовательские интерфейсы heating_widget.ui
Если я использую слот для кнопок на моем QMainWindow, я могу использовать это для вывода приложения в полноэкранный режим:

void SmartHome::on_fullscreen_on_clicked()
{
SmartHome::setWindowState(Qt::WindowFullScreen);
}

Но как я могу сделать это с помощью кнопки, которая находится в файле heating_widget.cpp?
С помощью:

void heating_widget::on_fullscreen_on_clicked()
{
SmartHome::setWindowState(Qt::WindowFullScreen);
}

очевидно не работает и выдает эту ошибку на меня:

не может вызвать функцию-член ‘void
QWidget :: setWindowState (Qt :: WindowStates) ‘без объекта
SmartHome :: setWindowState (Qt :: WindowFullScreen);

Я знаю, что это как-то связано с parent (), но я не могу заставить его работать.

Есть ли у вас какие-либо идеи?

Мой файл smarthome.h:

#ifndef SMARTHOME_H
#define SMARTHOME_H
#include <QTime>
#include <QMainWindow>

namespace Ui {
class SmartHome;
}

class SmartHome : public QMainWindow
{
Q_OBJECT

public:
explicit SmartHome(QWidget *parent = 0);
~SmartHome();

private slots:
void on_Info_Button_clicked();

void on_News_Button_clicked();

void on_Heating_clicked();

void timerslot();

void on_Config_clicked();

void on_About_clicked();

public slots:

void setFullscreen();

private:
Ui::SmartHome *ui;
QTimer* myTimer;
};

#endif // SMARTHOME_H

Мой heating_widget.h:

#ifndef HEATING_WIDGET_H
#define HEATING_WIDGET_H
#include "smarthome.h"
#include <QWidget>

namespace Ui {
class heating_widget;
class SmartHome;

}

class heating_widget : public QWidget
{
Q_OBJECT

public:
explicit heating_widget(QWidget *parent = 0);
~heating_widget();

private slots:

void on_fullscreen_on_clicked();

private:
Ui::heating_widget *ui;
};

#endif // HEATING_WIDGET_H

и мой heating.widget.cpp:

#include "heating_widget.h"#include "ui_heating_widget.h"#include "smarthome.h"#include "iostream"
heating_widget::heating_widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::heating_widget)
{
ui->setupUi(this);

QObject::connect(ui->fullscreen_on, SIGNAL(clicked()), this , SLOT(SmartHome::setFullscreen()));
}

heating_widget::~heating_widget()
{
delete ui;
}

void heating_widget::on_fullscreen_on_clicked()
{
parentWidget()->setWindowState(Qt::WindowFullScreen);
std::cout<<"clicked"<<std::endl;
}

1

Решение

Я бы сделал это следующим образом:

void heating_widget::on_fullscreen_on_clicked()
{
foreach(QWidget *widget, QApplication::topLevelWidgets()) {
if (auto mainWindow = qobject_cast<SmartHome *>(widget)) {
mainWindow->setWindowState(Qt::WindowFullScreen);
}
}
}

Идея состоит в том, чтобы найти ваше главное окно среди виджетов верхнего уровня приложения и изменить его состояние. Этот код может быть вызван из любой точки вашего приложения, независимо от иерархии окон.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]