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 = );
~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两个窗口相互切换的更多相关文章
- 01.QT初学--两个窗口相互切换
		
//qqwidget.cpp #include "qqwidget.h" #include "ui_qqwidget.h" qqwidget::qqwidget ...
 - QT 主窗口和子窗口相互切换示例
		
QT 主窗口和子窗口相互切换示例 文件列表: SubWidget.h #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QtWidgets/QW ...
 - 关于Qt5(1)-- 两个窗口互相切换的例子
		
<QT Creator快速入门>这本书有一章介绍model和modeless的概念时,用到了两个窗口互相切换的例子.但是原文对该例子的说明非常模糊不清,现整理如下. 1,要求:登陆界面.主 ...
 - Android:实现两个Activity相互切换而都不走onCreate()
		
本文要实现的目的是: 有3个Activity: A,B,C.从A中能够进入B,B中能够进入C.而且B和C之间可能须要多次相互切换,因此不能使用普通的startActivity-finish方式,由于又 ...
 - 【Qt编程】Qt学习之窗口间的相互切换
		
在用Qt设计GUI时,经常要设计两个窗口之间的相互切换,即可以从一个窗口跳转到另一个窗口,然后又从另一个窗口跳转回原窗口.下面我们来介绍具体的实现方法: 工程建立及功能描述: 首先,我们建立Qt G ...
 - Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)
		
Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口.下面分别叙述用这两种方式来实现窗口边框圆角的效果. 一.使用setStyleSheet方法 this- ...
 - Qt::QWindow多窗口争抢置顶状态解决方案
		
有时候我们会有这种需求,自己的桌面程序需要置顶,但是程序包含了很多窗口,可能我们要求窗口1,2都在其它桌面程序之上,但是窗口1必须随时在窗口2之上. Qt提供的置顶方式是在windowsflags上增 ...
 - WPF中两个窗口的互斥
		
这里所讲的互斥是两个窗口不同时存在,打开一,只显示一:点一相关按钮显示二,关闭一:关闭二,显示一. 窗口一: history winResult winChoice = new winResult() ...
 - [转]Ubuntu中root用户和user用户的相互切换
		
[转]Ubuntu中root用户和user用户的相互切换 http://www.cnblogs.com/weiweiqiao99/archive/2010/11/10/1873761.html Ubu ...
 
随机推荐
- CodeForces 909D
			
题意略. 思路: 将字符分桶,然后暴力去扫,扫完合并.假设有k个桶,每个桶里有n / k个数,那么我们应该要扫 n / (2 * k)次,每次的复杂度是k,最后算得复杂度是O(n). 详见代码: #i ...
 - [Python] 通过采集两万条数据,对《无名之辈》影评分析
			
一.说明 本文主要讲述采集猫眼电影用户评论进行分析,相关爬虫采集程序可以爬取多个电影评论. 运行环境:Win10/Python3.5. 分析工具:jieba.wordcloud.pyecharts.m ...
 - css3的@media
			
都知道bootstrap响应式布局很酷,但是是怎么实现的呢?其官网首页有提到这一切的功劳都是来自于CSS 媒体查询(Media Query). 使用 @media 查询,你可以针对不同的媒体类型定义不 ...
 - CodeForces 834D The Bakery
			
The Bakery 题意:将N个数分成K块, 每块的价值为不同数字的个数, 现在求总价值最大. 题解:dp[i][j] 表示 长度为j 且分成 i 块的价值总和. 那么 dp[i][j] = max ...
 - 移位密码(加密+解密)C++实现
			
移位密码 加密C=Ek(m)=m+k mod 26 解密m=Dk(m)=c-k mod 26 密钥空间|k|=26=|c|=|m| #include<iostream> #include& ...
 - 希尔排序的正确性 (Correctness of ShellSort)
			
学希尔排序的时候,觉得有序性保持的性质十分神奇,但哪里都找不到数学证明.最后在Donald E. Knuth的The Art of Computer Programming中找到了(显然我没有读过这套 ...
 - Could not calculate build plan :lugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of
			
eclipse中新建maven项目,出现 Could not calculate build plan :lugin org.apache.maven.plugins:maven-resources- ...
 - STL容器(Stack, Queue, List, Vector, Deque, Priority_Queue, Map, Pair, Set, Multiset, Multimap)
			
一.Stack(栈) 这个没啥好说的,就是后进先出的一个容器. 基本操作有: stack<int>q; q.push(); //入栈 q.pop(); //出栈 q.top(); //返回 ...
 - Mysql高手系列 - 第10篇:常用的几十个函数详解,收藏慢慢看
			
这是Mysql系列第10篇. 环境:mysql5.7.25,cmd命令中进行演示. MySQL 数值型函数 函数名称 作 用 abs 求绝对值 sqrt 求二次方根 mod 求余数 ceil 和 ce ...
 - CentOS 7.6安装MySQL 5.7GA版
			
环境准备 卸载mariadb rpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64 centos7 内部集 ...