QT实现两个组件之间相互跳转

form.h

#ifndef FORM_H
#define FORM_H

#include <QWidget>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();

private:
    Ui::Form *ui;
public slots:
    void on_show_slots();
private slots:
    void on_form_jump_clicked();
signals:
     void emit_form_jump_signals();

};

#endif // FORM_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

signals:
    void emit_jump_signals();
public slots:
    void on_pushButton_clicked();
    void on_show_slots();
};
#endif // WIDGET_H

form.cpp

#include "form.h"
#include "ui_form.h"

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

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

void Form::on_show_slots()
{
    this->show();
}

void Form::on_form_jump_clicked()
{
    emit emit_form_jump_signals();
    this->hide();
}

main.cpp

#include "widget.h"
#include "form.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    Form f;
    //点击主界面的按钮,主界面会发射jump_signals信号
    //同时隐藏主界面,次界面s接收到执行槽函数
    QObject::connect(&w,&Widget::emit_jump_signals,&f,&Form::on_show_slots);

    QObject::connect(&f,&Form::emit_form_jump_signals,&w,&Widget::on_show_slots);

    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

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


void Widget::on_pushButton_clicked()
{
    emit emit_jump_signals();//手动发送自定义信号
    this->hide(); //同时隐藏主界面
}

void Widget::on_show_slots()
{
    this->show();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,可以使用信号和槽机制来实现两个UI界面之间相互跳转。下面是一个简单的示例: 首先,创建两个UI界面,比如`MainWindow`和`SecondWindow`。 在`MainWindow`的代码中,添加一个按钮,当点击该按钮时触发一个信号: ```cpp // MainWindow.h #include <QMainWindow> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); signals: void goToSecondWindow(); // 定义一个信号,在点击按钮时触发 private: // ... }; ``` ```cpp // MainWindow.cpp #include "MainWindow.h" #include "SecondWindow.h" #include <QPushButton> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QPushButton *button = new QPushButton("Go to Second Window", this); connect(button, &QPushButton::clicked, this, &MainWindow::goToSecondWindow); // ... } ``` 然后,在`SecondWindow`的代码中,添加一个槽函数,用于处理从`MainWindow`发送过来的信号,并在该槽函数中显示`SecondWindow`: ```cpp // SecondWindow.h #include <QMainWindow> class SecondWindow : public QMainWindow { Q_OBJECT public: SecondWindow(QWidget *parent = nullptr); public slots: void showWindow(); // 定义一个槽函数,用于显示SecondWindow private: // ... }; ``` ```cpp // SecondWindow.cpp #include "SecondWindow.h" SecondWindow::SecondWindow(QWidget *parent) : QMainWindow(parent) { // ... } void SecondWindow::showWindow() { show(); // 显示SecondWindow } ``` 最后,在主函数中,创建`MainWindow`和`SecondWindow`的实例,并连接信号和槽: ```cpp #include <QApplication> #include "MainWindow.h" #include "SecondWindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow mainWindow; SecondWindow secondWindow; QObject::connect(&mainWindow, &MainWindow::goToSecondWindow, &secondWindow, &SecondWindow::showWindow); mainWindow.show(); return a.exec(); } ``` 现在,当在`MainWindow`中点击按钮时,会触发信号`goToSecondWindow`,然后该信号会连接到`SecondWindow`的槽函数`showWindow`,从而实现两个UI界面之间跳转

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值