要解决这个问题,可以使用信号和槽机制来实现。

首先,在主界面的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();
}

这样,当按钮被点击时,主界面和组件都会关闭。

解决Qt中主界面的QWidget窗口组件的按钮点击后关闭组件和主界面

原文地址: https://www.cveoy.top/t/topic/iw6r 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录