QT中使用信号槽的方式设计实现A.B两个界面的切换

当创建一个使用Qt框架的多窗口应用程序时,以下是一些详细的步骤和操作说明:

  1. 打开Qt开发环境(如Qt Creator)并创建一个新的Qt Widgets应用程序项目。

  2. 在项目中创建两个窗口类:AMainWindow和BMainWindow。可以使用Qt的界面设计器来创建这些窗口的UI文件(amainwindow.ui和bmainwindow.ui)。

    • 在Qt Creator的项目资源视图中,右键单击项目文件夹,选择"添加新"->"Qt"->"Qt Designer Form Class"。
    • 在对话框中选择"Qt Widgets"作为基类,输入类名(AMainWindow或BMainWindow),然后点击"下一步"。
    • 在下一个对话框中,选择"创建一个窗口小部件",然后点击"完成"。
    • 这将为您创建一个相应的UI文件(amainwindow.ui或bmainwindow.ui)以及相关的头文件(ui_amainwindow.h或ui_bmainwindow.h)。(拖拽按钮后记得右击转到槽,选第一个)
  3. 在AMainWindow类的头文件(amainwindow.h)中,声明信号ASignal()和槽函数AmySlot()AmySlot2()以及on_pushButton_clicked()

    // amainwindow.h
    #ifndef AMAINWINDOW_H
    #define AMAINWINDOW_H
    
    #include <QMainWindow>
    #include "bmainwindow.h"
    
    namespace Ui {
    class AMainWindow;
    }
    
    class AMainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit AMainWindow(QWidget *parent = 0);
        ~AMainWindow();
    signals:
        void ASignal();
    private slots:
        void AmySlot();
        void AmySlot2();
        void on_pushButton_clicked();
    
    private:
        Ui::AMainWindow *ui;
        BMainWindow *mB;
    };
    
    #endif // AMAINWINDOW_H

  4. 在AMainWindow类的源文件(amainwindow.cpp)中实现构造函数、析构函数和槽函数。
    // amainwindow.cpp
    #include "amainwindow.h"
    #include "ui_amainwindow.h"
    
    AMainWindow::AMainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::AMainWindow)
    {
        ui->setupUi(this);
        
        // 连接信号ASignal()和槽函数AmySlot()
        connect(this, SIGNAL(ASignal()), this, SLOT(AmySlot()));
        
        // 创建BMainWindow实例,并连接其信号BSignal()和槽函数AmySlot2()
        mB = new BMainWindow(this);
        connect(mB, SIGNAL(BSignal()), this, SLOT(AmySlot2()));
        
        // 显示BMainWindow窗口
        mB->show();
    }
    
    AMainWindow::~AMainWindow()
    {
        delete ui;
    }
    
    void AMainWindow::AmySlot()
    {
        // 显示BMainWindow窗口,隐藏AMainWindow窗口
        mB->show();
        this->hide();
    }
    
    void AMainWindow::AmySlot2()
    {
        // 显示AMainWindow窗口,隐藏BMainWindow窗口
        this->show();
        mB->hide();
    }
    
    void AMainWindow::on_pushButton_clicked()
    {
        // 发射信号ASignal()
        emit ASignal();
    }

  5. 在BMainWindow类的头文件(bmainwindow.h)中,声明信号BSignal()和槽函数on_pushButton_clicked()
    // bmainwindow.h
    #ifndef BMAINWINDOW_H
    #define BMAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class BMainWindow;
    }
    
    class BMainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit BMainWindow(QWidget *parent = 0);
        ~BMainWindow();
    signals:
        void BSignal();
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::BMainWindow *ui;
    };
    
    #endif // BMAINWINDOW_H

  6. 在BMainWindow类的源文件(bmainwindow.cpp)中实现构造函数、析构函数和槽函数。
    // bmainwindow.cpp
    #include "bmainwindow.h"
    #include "ui_bmainwindow.h"
    
    BMainWindow::BMainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::BMainWindow)
    {
        ui->setupUi(this);
    }
    
    BMainWindow::~BMainWindow()
    {
        delete ui;
    }
    
    void BMainWindow::on_pushButton_clicked()
    {
        // 发射信号BSignal()
        emit BSignal();
    }

  7. 在主函数(main.cpp)中创建AMainWindow实例并运行应用程序。
    #include "amainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        AMainWindow w;
        w.show();
        return a.exec();
    }

    完成上述步骤后,您将创建一个使用Qt框架的多窗口应用程序。在该应用程序中,AMainWindow和BMainWindow是两个独立的窗口,它们可以相互切换显示。当在AMainWindow窗口点击按钮时,将发射信号ASignal(),然后在AMainWindow类中的槽函数AmySlot()中可以实现显示BMainWindow窗口、隐藏AMainWindow窗口的逻辑。同样,当在BMainWindow窗口点击按钮时,将发射信号BSignal(),然后在AMainWindow类中的槽函数AmySlot2()中可以实现显示AMainWindow窗口、隐藏BMainWindow窗口的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值