QT使用同一按钮实现打开/关闭新窗口

通过一个全局布尔变量newWinFlag记录窗口状态,点击按钮时切换状态,当状态为true时创建并显示新窗口,反之则关闭窗口。实现代码中定义了一个Form类型的configWindow,并在按钮点击事件on_pushButton_clicked()中处理窗口的打开与关闭逻辑。
摘要由CSDN通过智能技术生成

QT使用同一按钮实现【打开/关闭】新窗口,实现方案如下:

  • 使用一个全局状态变量记录窗口打开状态
  • 通过该状态实现新窗口的showclose

请添加图片描述

实现代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "form.h"
#include <QDebug>

static bool newWinFlag = false;
Form *configWindow = NULL;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void MainWindow::on_pushButton_clicked()
{
    qDebug() << newWinFlag;
    newWinFlag = !newWinFlag;
    if(newWinFlag == true)
    {
        configWindow = new Form;
        configWindow->show();
        return;
    }
    else
    {
        configWindow->close();
        return;
    }

}


参考链接:

  • https://blog.csdn.net/shenlaoli/article/details/128681032
要在Qt实现按钮打开新的UI界面,可以使用QStackedWidget控件。QStackedWidget是一个堆栈窗口部件,可以在其中添加多个子窗口,并通过在堆栈中切换来显示不同的子窗口。 以下是实现按钮打开新的UI界面的步骤: 1. 在Qt Designer中创建一个新的UI界面,例如new_ui.ui。 2. 在主窗口的构造函数中创建一个QStackedWidget控件,并将其设置为主窗口的中心部件: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { // 创建堆栈窗口部件 m_stackWidget = new QStackedWidget(this); // 设置堆栈窗口部件为主窗口的中心部件 setCentralWidget(m_stackWidget); } ``` 3. 创建一个新的QWidget对象,并将其加载为新的UI界面: ``` // 创建新的QWidget对象 QWidget *newWidget = new QWidget(); // 加载新的UI界面 Ui::NewUi ui; ui.setupUi(newWidget); ``` 4. 将新的QWidget对象添加到QStackedWidget控件中: ``` // 将新的QWidget对象添加到QStackedWidget控件中 m_stackWidget->addWidget(newWidget); ``` 5. 创建一个QPushButton按钮,并在其clicked()信号中切换到新的UI界面: ``` // 创建QPushButton按钮 QPushButton *button = new QPushButton("Open New UI", this); // 将QPushButton按钮添加到主窗口 layout()->addWidget(button); // 在QPushButton按钮的clicked()信号中切换到新的UI界面 connect(button, &QPushButton::clicked, [this](){ m_stackWidget->setCurrentIndex(1); // 1表示新的UI界面在堆栈窗口部件中的索引 }); ``` 完整的示例代码如下: ``` #include <QMainWindow> #include <QPushButton> #include <QStackedWidget> #include "new_ui.h" // 新的UI界面头文件 class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { // 创建堆栈窗口部件 m_stackWidget = new QStackedWidget(this); // 设置堆栈窗口部件为主窗口的中心部件 setCentralWidget(m_stackWidget); // 创建QPushButton按钮 QPushButton *button = new QPushButton("Open New UI", this); // 将QPushButton按钮添加到主窗口 layout()->addWidget(button); // 在QPushButton按钮的clicked()信号中切换到新的UI界面 connect(button, &QPushButton::clicked, [this](){ m_stackWidget->setCurrentIndex(1); // 1表示新的UI界面在堆栈窗口部件中的索引 }); // 创建新的QWidget对象 QWidget *newWidget = new QWidget(); // 加载新的UI界面 Ui::NewUi ui; ui.setupUi(newWidget); // 将新的QWidget对象添加到QStackedWidget控件中 m_stackWidget->addWidget(newWidget); } private: QStackedWidget *m_stackWidget; // 堆栈窗口部件 }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值