信号(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 = );
~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(,); 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(,);
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(,);
int a=;
connect(b4,&QPushButton::clicked,
[=](bool bb) mutable //若想修改值,需加mutable
{
b4->setText("lambda表达式");
a++;
qDebug()<<"成功!!!"<<a<<bb;
}
);   //设定尺寸,避免切换时窗口大小改变
resize(,); }
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(,);
}
void win_1::send_s1(){
emit signal_0();
emit signal_0(,"转到窗口1");
}

QT两个窗口相互切换的更多相关文章

  1. 01.QT初学--两个窗口相互切换

    //qqwidget.cpp #include "qqwidget.h" #include "ui_qqwidget.h" qqwidget::qqwidget ...

  2. QT 主窗口和子窗口相互切换示例

    QT 主窗口和子窗口相互切换示例 文件列表: SubWidget.h #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QtWidgets/QW ...

  3. 关于Qt5(1)-- 两个窗口互相切换的例子

    <QT Creator快速入门>这本书有一章介绍model和modeless的概念时,用到了两个窗口互相切换的例子.但是原文对该例子的说明非常模糊不清,现整理如下. 1,要求:登陆界面.主 ...

  4. Android:实现两个Activity相互切换而都不走onCreate()

    本文要实现的目的是: 有3个Activity: A,B,C.从A中能够进入B,B中能够进入C.而且B和C之间可能须要多次相互切换,因此不能使用普通的startActivity-finish方式,由于又 ...

  5. 【Qt编程】Qt学习之窗口间的相互切换

    在用Qt设计GUI时,经常要设计两个窗口之间的相互切换,即可以从一个窗口跳转到另一个窗口,然后又从另一个窗口跳转回原窗口.下面我们来介绍具体的实现方法: 工程建立及功能描述: 首先,我们建立Qt  G ...

  6. Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)

    Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口.下面分别叙述用这两种方式来实现窗口边框圆角的效果. 一.使用setStyleSheet方法 this- ...

  7. Qt::QWindow多窗口争抢置顶状态解决方案

    有时候我们会有这种需求,自己的桌面程序需要置顶,但是程序包含了很多窗口,可能我们要求窗口1,2都在其它桌面程序之上,但是窗口1必须随时在窗口2之上. Qt提供的置顶方式是在windowsflags上增 ...

  8. WPF中两个窗口的互斥

    这里所讲的互斥是两个窗口不同时存在,打开一,只显示一:点一相关按钮显示二,关闭一:关闭二,显示一. 窗口一: history winResult winChoice = new winResult() ...

  9. [转]Ubuntu中root用户和user用户的相互切换

    [转]Ubuntu中root用户和user用户的相互切换 http://www.cnblogs.com/weiweiqiao99/archive/2010/11/10/1873761.html Ubu ...

随机推荐

  1. 王某人从0开始学习lorawan的笔记_1:最底层!IO驱动层,Gpio_t类

    本来想介绍SX1276(与SX1278的操作完全相同,只是需要处理频段)的,但是这款芯片内容还是很丰富的,三言两语介绍不清,而且资料也很多就算了. 直接正面怼lorawan吧,怼到高地去,打爆lora ...

  2. json-server的安装及使用

    首先介绍一下什么是json-server,用处是什么,其实很简单:JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源. ...

  3. Nginx总结(五)如何配置nginx和tomcat实现反向代理

    前面讲了如何配置Nginx虚拟主机,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 今天要 ...

  4. POJ - 3660 Cow Contest 传递闭包floyed算法

    Cow Contest POJ - 3660 :http://poj.org/problem?id=3660   参考:https://www.cnblogs.com/kuangbin/p/31408 ...

  5. 牛客多校第二场B discount 基环内向树

    题意: 有n种商品,每种商品有一个价格 p[i] . 每种商品都有2种打折方式: 1. 给你优惠 d[i] 元. 2. 免费送你第 f[i] 种饮料. 现在求每种饮料至少一瓶的最小花费. dp[i][ ...

  6. 详解RMQ-ST算法 ST模板

    RMQ问题是求解区间最值的问题. 这里分析的是ST算法,它可以对所有要处理的数据做到O(nlogn)的预处理,对每个区间查询做到O(1)查询 ST算法本质是一个DP的过程 这里通过举一个求最大值实例来 ...

  7. poj 3616 Milking Time (基础dp)

    题目链接 http://poj.org/problem?id=3616 题意:在一个农场里,在长度为N个时间可以挤奶,但只能挤M次,且每挤一次就要休息t分钟: 接下来给m组数据表示挤奶的时间与奶量求最 ...

  8. 决胜Flutter 第一章 熟悉战场

    欢迎参加“决胜Flutter” 实训课程,这里是你此次实训之旅的起点. 本章将带您快速了解移动开发的现状,然后向您介绍Flutter的发展历史以及优势特点,最后一起动手,搭建高效的开发环境. 由于Fl ...

  9. Java 调式、热部署、JVM 背后的支持者 Java Agent

    我们平时写 Java Agent 的机会确实不多,也可以说几乎用不着.但其实我们一直在用它,而且接触的机会非常多.下面这些技术都使用了 Java Agent 技术,看一下你就知道为什么了. -各个 J ...

  10. Java连载30-方法重载、方法递归

    一.方法重载 1.又被称为overload 2.方法重载使用场景 功能类似的时候,尽可能仍方法名相同(但是功能不同或者不相似的时候,方法名尽量不同) 3.什么条件满足之后,可以构成方法重载 (1)在同 ...