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 ...
随机推荐
- 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(三)
(六)工程结构 (一)应用分层 1. [推荐]图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web 层,也可以直接依赖于 Service 层,依此类推: 开放接口层: ...
- 一文读懂HashMap
推荐 转载:https://www.jianshu.com/p/ee0de4c99f87
- CentOS7下使用SonatypeNexus3搭建Docker私有仓库
前置条件:安装docker(如果机器上没有安装的话) //安装一些必要的系统工具: sudo yum install -y yum-utils device-mapper-persistent-dat ...
- HDU 4719Oh My Holy FFF 线段树+DP
/* ** 日期: 2013-9-12 ** 题目大意:有n个数,划分为多个部分,假设M份,每份不能多于L个.每个数有一个h[i], ** 每份最右边的那个数要大于前一份最右边的那个数.设每份最右边的 ...
- codeforces 814 D. An overnight dance in discotheque (贪心+bfs)
题目链接:http://codeforces.com/contest/814/problem/D 题意:给出奇数个舞者,每个舞者都有中心坐标和行动半径,而且这些点组成的园要么相互包含要么没有交集求,讲 ...
- poj 2240 Arbitrage(Bellman_ford变形)
题目链接:http://poj.org/problem?id=2240 题目就是要通过还钱涨自己的本钱最后还能换回到自己原来的钱种. 就是判一下有没有负环那么就直接用bellman_ford来判断有没 ...
- Constructing Roads HDU 1102
There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...
- Codeforces Round #582 (Div. 3)
题目链接:https://codeforces.com/contest/1213 A: 题意:给定数的位置,位置为整数,每个数可以向左或右移动一格或者两格,移动一格花费一个硬币,两格不花费硬币,问所有 ...
- 【Spring】对持久层技术的整合
一.持久层技术 二.JdbcTemplate 开发步骤: 1. 导入相关的jar包 2. 配置连接池(数据源) 将参数设置到属性文件中: 3. 创建表 4. 编写实体类 5. Dao层实现 5.1 继 ...
- Linux入门基础之 中
五.Linux 下获取帮助 没必要记住所有东西 Linux 提供了极为详细的帮助工具及文档,一定要养成查帮助文档的习惯,可以大大减少需要记忆的东西并且提高效率 5.1.HELP 几乎所有命令都可以使用 ...