解决Qt中主界面的QWidget窗口组件的按钮点击后关闭组件和主界面
要解决这个问题,可以使用信号和槽机制来实现。
首先,在主界面的QWidget窗口组件中定义一个信号,用于通知主界面关闭自己和组件。可以在头文件中添加如下代码:
signals:
void closeMainWindow();
然后,在按钮的点击事件中发送这个信号,可以在槽函数中添加如下代码:
void MyWidget::on_pushButton_clicked()
{
emit closeMainWindow();
close();
}
接着,在主界面中连接这个信号和槽函数,可以在构造函数中添加如下代码:
connect(widget, &MyWidget::closeMainWindow, this, &MainWindow::close);
这样,当按钮被点击时,会发送closeMainWindow信号,主界面接收到这个信号后会关闭自己和组件。
完整的示例代码如下:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "mywidget.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
MyWidget *widget;
};
#endif // MAINWINDOW_H
// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
widget = new MyWidget(this);
connect(widget, &MyWidget::closeMainWindow, this, &MainWindow::close);
widget->show();
}
MainWindow::~MainWindow()
{
delete ui;
}
// mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
~MyWidget();
signals:
void closeMainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MyWidget *ui;
};
#endif // MYWIDGET_H
// mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
}
MyWidget::~MyWidget()
{
delete ui;
}
void MyWidget::on_pushButton_clicked()
{
emit closeMainWindow();
close();
}
这样,当按钮被点击时,主界面和组件都会关闭。
原文地址: https://www.cveoy.top/t/topic/iw6r 著作权归作者所有。请勿转载和采集!