QT两个窗口间的相互切换

Posted creature-lurk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT两个窗口间的相互切换相关的知识,希望对你有一定的参考价值。

  信号(signals)与槽(slots)是QT重要机制,例子使用了C++11 lambda表达式进行了信号与槽的连接。

实现两个窗口通过点击按钮完成互相切换,注意子窗口只能发送信号,不能处理,所有信号应在主窗口定义相应处理槽函数处理。

主窗口:

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include
<QWidget> #include <QPushButton> #include "win_1.h" class mywidget : public QWidget Q_OBJECT public: mywidget(QWidget *parent = 0); ~mywidget();
void on_b1_clicked(); void on_b3_clicked(); void work_s1(); void work_s2(int,QString); private: QPushButton b1,*b2,b3; win_1 w; ; #endif // MYWIDGET_H

 

mywidget.cpp

#include "mywidget.h"

#include <QDebug>


mywidget::mywidget(QWidget
*parent) : QWidget(parent) b1.setParent(this); b1.setText("按钮1"); b1.move(100,100); b2=new QPushButton(this); //b2->setParent(this); b2->setText("按钮2");
connect(b2,&QPushButton::clicked,this,&mywidget::close); connect(&b1,&QPushButton::clicked,this,&mywidget::on_b1_clicked); connect(&b1,&QPushButton::clicked,b2,&mywidget::hide);

setWindowTitle(
"窗口1"); b3.setParent(this); b3.setText("转到窗口2"); b3.move(200,200); connect(&b3,&QPushButton::clicked,this,&mywidget::on_b3_clicked); void (win_1::*signal_01)()=&win_1::signal_0; void(win_1::*signal_02)(int,QString)=&win_1::signal_0; connect(&w,signal_01,this,&mywidget::work_s1); connect(&w,signal_02,this,&mywidget::work_s2); //lambda表达式,只读方式,注意在.pro文件中配置C++11 // = 外部所有成员以值传入 // this 类中所有成员以值传递 // & 外部所有引用传入 QPushButton *b4=new QPushButton(this); b4->setText("LAMBDA表达式"); b4->move(400,400); int a=10; connect(b4,&QPushButton::clicked, [=](bool bb) mutable //若想修改值,需加mutable b4->setText("lambda表达式"); a++; qDebug()<<"成功!!!"<<a<<bb; );   //设定尺寸,避免切换时窗口大小改变 resize(600,480);
void mywidget::on_b1_clicked() b1.setText("我是按钮1"); void mywidget::on_b3_clicked() this->hide(); w.show(); void mywidget::work_s1() w.hide(); show(); void mywidget::work_s2(int i,QString s) qDebug()<<i<<s.toUtf8().data(); mywidget::~mywidget()

子窗口:

win_1.h

#ifndef WIN_1_H
#define WIN_1_H

#include <QWidget>
#include <QPushButton>

class win_1 : public QWidget

    Q_OBJECT
public:
    explicit win_1(QWidget *parent = nullptr);
    void send_s1();

signals:
    void signal_0();  //不带参信号
    void signal_0(int,QString);  //带参信号

public slots:

private:
    QPushButton b1;

;

#endif // WIN_1_H

win_1.cpp

#include "win_1.h"

win_1::win_1(QWidget *parent) : QWidget(parent)

    setWindowTitle("窗口2");
    b1.setParent(this);
    b1.setText("转到窗口1");

    connect(&b1,&QPushButton::clicked,this,&win_1::send_s1);

    resize(600,480);

void win_1::send_s1()
    emit signal_0();
    emit signal_0(250,"转到窗口1");

以上是关于QT两个窗口间的相互切换的主要内容,如果未能解决你的问题,请参考以下文章

QT如何实现QStackedWidget界面间的切换

关于Qt5-- 两个窗口互相切换的例子

C# Winform多个窗体界面间的切换

Java中两个JFrame窗口的切换问题

QT5 Widgets 大小切换问题

【求助】关于Qt的QMdiArea的问题