(QT)QT跳转页面(信号-槽机制)

QT的界面跳转一般常用的也就是通过信号-槽机制去实现,那什么是信号-槽呢?按我自己的理解来说,就是好比如人(相当于信号)和游泳池(相当于槽)。当人觉得天气很热想去游泳了,就会去找游泳池游泳,换成专业点的说法就是当触发某个事件时,将触发信号传送到特定位置执行相关操作。


那么我将以登陆界面跳转主界面为例子:(登陆界面类名为login,主界面类名为mainwindow)

(1)      首先我们要创建项目



这里需要注意是继承QMainWindow,作为以后的主界面




(2)      之后再新增一个类,用于设计和实现登陆界面的功能。(右键——)新增新文件)




之后选择Dialog without Buttons后点击下一步,修改类名点击确定即可完成新文件的添加。



(3)      设计登陆界面,以下是我的设计界面(2lineEdit2Label和一个pushButton



(4)      实现QT页面跳转功能

接下来将开始实现QT页面跳转功能,在(3)的页面中,右键pushbutton按钮,选择转为槽


之后选择clicked()即可。页面也就会跳转到login.cpp让你写clicked()函数的实现代码了。


回到login.h里面,可以看到多了以下一样东西



Slots也就是槽的意思,作用我待会往下再说。

 

此时我要在此页面增加一个信号,用于将此信号传送给其他页面,以实现页面跳转功能。



此函数不需要在CPP文件实现,因为它只作为信号进行传输到特定页面即可,俗话说就是制作人出来,让人去找游泳池。

 

下面给出clicked的函数实现代码

下面给出clicked的函数实现代码
void login::on_btn1_clicked()
{
    this->hide();              //屏蔽登陆界面
    emit showmain();           //激活信号,让信号传送到特定页面
}


(5)      回到mainwindow.h文件中,添加以下方框的代码。




添加的是槽函数,也就是游泳池了,槽函数也是接受到与其相关相联系信号后执行相关操作的函数,也就是人(信号)只要到了游泳池(槽),也就会去游泳了。

 

其槽函数实现也很简单,就是让它显示即可。

void MainWindow::receivelogin()
{
    this->show();
}

(6)      最后还需要将信号与槽函数建立联系,在main.cpp文件中添加以下代码



其实主要的是connect这个函数,是设置将哪个信号传送哪个页面,这也就实现了QT跳转页面的功能了。



以上就是讲解,实例源代码在下面,需要的可自行下载:
  • 28
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Qt中,要实现按钮点击后跳转页面,可以使用QStackedWidget、QStackedLayout或QTabWidget来管理多个面。下面是一个简单的示例: 1. 创建两个面的QWidget子类,比如Page1和Page2。 ```cpp // page1.h #ifndef PAGE1_H #define PAGE1_H #include <QWidget> class Page1 : public QWidget { Q_OBJECT public: explicit Page1(QWidget *parent = nullptr); signals: void goToPage2(); private slots: void onButtonClicked(); }; #endif // PAGE1_H // page1.cpp #include "page1.h" #include <QPushButton> #include <QVBoxLayout> Page1::Page1(QWidget *parent) : QWidget(parent) { QPushButton *button = new QPushButton("Go to Page 2", this); connect(button, &QPushButton::clicked, this, &Page1::onButtonClicked); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(button); setLayout(layout); } void Page1::onButtonClicked() { emit goToPage2(); } ``` ```cpp // page2.h #ifndef PAGE2_H #define PAGE2_H #include <QWidget> class Page2 : public QWidget { Q_OBJECT public: explicit Page2(QWidget *parent = nullptr); signals: void goToPage1(); private slots: void onButtonClicked(); }; #endif // PAGE2_H // page2.cpp #include "page2.h" #include <QPushButton> #include <QVBoxLayout> Page2::Page2(QWidget *parent) : QWidget(parent) { QPushButton *button = new QPushButton("Go back to Page 1", this); connect(button, &QPushButton::clicked, this, &Page2::onButtonClicked); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(button); setLayout(layout); } void Page2::onButtonClicked() { emit goToPage1(); } ``` 2. 创建一个主窗口的QWidget子类,比如MainWindow,使用QStackedWidget作为主要的面管理器。 ```cpp // mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStackedWidget> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void goToPage2(); void goToPage1(); private: QStackedWidget *stackedWidget; }; #endif // MAINWINDOW_H // mainwindow.cpp #include "mainwindow.h" #include "page1.h" #include "page2.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { stackedWidget = new QStackedWidget(this); setCentralWidget(stackedWidget); Page1 *page1 = new Page1(this); Page2 *page2 = new Page2(this); stackedWidget->addWidget(page1); stackedWidget->addWidget(page2); connect(page1, &Page1::goToPage2, this, &MainWindow::goToPage2); connect(page2, &Page2::goToPage1, this, &MainWindow::goToPage1); } MainWindow::~MainWindow() { } void MainWindow::goToPage2() { stackedWidget->setCurrentIndex(1); // 切换面2 } void MainWindow::goToPage1() { stackedWidget->setCurrentIndex(0); // 切换面1 } ``` 3. 在main函数中创建并显示MainWindow。 ```cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } ``` 以上代码演示了如何通过点击按钮在两个面间跳转。Page1和Page2作为两个不同的QWidget子类,通过信号机制实现按钮点击后的切换。MainWindow则使用QStackedWidget作为中央部件,将Page1和Page2添加进去,并连接按钮点击信号切换函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值