gpt4 book ai didi

c++ - 来自 QWidget 的 QMainWindow 的 setWindowState

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:06 25 4
gpt4 key购买 nike

我有一个 QMainWindow 应用程序,其中还包含一个 QStackedWidget。QstackedWidget 的页面被提升为 ui 小部件,例如 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);
}

显然不起作用并向我抛出此错误:

cannot call member function 'void QWidget::setWindowState(Qt::WindowStates)' without object 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;
}

最佳答案

我会按照以下方式进行:

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

想法是在应用程序顶级小部件中找到您的主窗口并更改其状态。无论 Windows 层次结构如何,都可以从应用程序中的任何位置调用此代码。

关于c++ - 来自 QWidget 的 QMainWindow 的 setWindowState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48598051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com