setWindowState from QMainWindow from QWidget
setWindowState from QMainWindow from QWidget
我有一个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);
}
显然不起作用并向我抛出此错误:
无法调用成员函数 'void QWidget::setWindowState(Qt::WindowStates(' without object SmartHome::setWindowState(Qt::WindowFullScreen(;
我知道这与 parent(( 有关,但我无法让它工作。
你有什么想法吗?
我的智能家居.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:
#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
和我的加热小部件.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);
}
}
}
这个想法是在应用程序顶级小部件中找到您的主窗口并更改其状态。无论窗口层次结构如何,都可以从应用程序中的任何位置调用此代码。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 如何在QT Creator上将QWidget声明为继承类的对象
- QWidget::p aintEngine:不应再在 QTreeWidget 派生类中调用
- 将一个 QWidget 链接到另一个新创建的 QWidget
- 为什么 isVisible 在 QWidget 孩子中不起作用
- std::async from std::async in windows xp
- 如何声明全局QWidget?
- QWidget UI 在使用 QQuickWidget 时冻结
- "(QWidget* pobj=0)"和"(QWidget* pwgt/*=0/)&quo
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- qt QWidget::closeEvent link issue
- 如何在QMdiSubWindow关闭后删除QWidget
- Visual accept std::string from std::byte iterator
- 如何在QGraphicsView中移动QWidget?
- setWindowState from QMainWindow from QWidget
- Paradigmatic sizeHint() from QWidget::createWindowContainer?
- Qt 动态创建 QWidget from QString.