linux qt实现窗口跳转_QT 主窗口和子窗口相互切换示例

本文展示了如何在Linux环境下使用QT进行窗口管理,包括主窗口与子窗口的切换、按钮事件处理、信号与槽的连接以及Lambda表达式的应用。
摘要由CSDN通过智能技术生成

#include "mainwidget.h"MainWidget::MainWidget(QWidget*parent)

: QWidget(parent)

{

ui.setupUi(this);this->setParent(parent);this->setWindowTitle(QString::fromLocal8Bit("老大"));this->resize(QSize(500, 500));

bt1= new QPushButton(this);

bt1->setText(QString::fromLocal8Bit("关闭窗口"));

bt1->move(QPoint(50, 50));/**

* bt1: 信号发出者, 指针类型

* &QPushButton::pressed: 信号的发射 &发送者的类名::信号名字

* this: 信号接受者, 指针类型

* &MainWidget::close: 信号的处理 &接收的类名::槽名字

**/connect(bt1,&QPushButton::pressed, this, &MainWidget::close);

bt2= new QPushButton(this);

bt2->setText(QString::fromLocal8Bit("隐藏关闭窗口按钮以及改变自身文本内容"));

bt2->move(QPoint(100, 100));/**

* Qt5: 槽和普通的C++成员函数几乎是一样的

* 可以是虚函数,可以被重载,可以是public slots、protected slots、private slots,可以被其他C++成员函数直接调用

* 唯一不同的是:槽还可以和信号连接在一起,在这种情况下,信号被发射时,会自动调用这个槽

* 槽不需要信号传过来的参数时,可以不要参数;但槽函数一旦要参数,其参数个数,类型,顺序必须要和对应的信号保持一致。另外,槽函数的参数不能有缺省值。

* 由于信号的返回值为void, 槽必须和信号的返回值保持一致, 因此槽的返回值为void

**/connect(bt2,&QPushButton::released, this, &MainWidget::myButtonReleasedSlot);

connect(bt2,&QPushButton::released, bt1, &QPushButton::hide);

bt3= new QPushButton(this);

bt3->setText(QString::fromLocal8Bit("切换到子窗口"));

bt3->move(QPoint(150, 150));

sw= newSubWidget();

connect(bt3,&QPushButton::released, this, &MainWidget::myChangeWin);void (SubWidget::*funSignal)() = &SubWidget::mySignal;void (SubWidget::*funSignalParm)(int, QString) = &SubWidget::mySignalParm;void (MainWidget::*funSlot)() = &MainWidget::myDealSub;void (MainWidget::*funSlotParm)(int, QString) = &MainWidget::myDealSubParm;

connect(sw, funSignal,this, funSlot);

connect(sw, funSignalParm,this, funSlotParm);/**

* Lambda 表达式, 匿名函数对象

* C++11 新增加的特性, 编译时需要添加参数C++11

* Qt配合信号一起使用, 非常方便*/QPushButton*bt4 = new QPushButton(this);

bt4->setText(QString::fromLocal8Bit("Lambda表达式并统计次数"));

bt4->move(QPoint(200, 200));int cout = 0;

connect(bt4,&QPushButton::clicked, this,//= : 把外部所有局部变量、类中所有成员以值传递方式//this : 类中所有成员以值传递方式//& : 把外部所有局部变量, 引用符号

[=](boolisCheck) mutable {

cout++;

bt4->setText(QString::fromLocal8Bit("点击次数:") +QString::number(cout));

qDebug()<< QString::fromLocal8Bit("这是一个Lambda表达式测试输出").toStdString().c_str();

qDebug()<< QString::fromLocal8Bit("打印参数:").toStdString().c_str() <

});

}

MainWidget::~MainWidget()

{//直接或间接继承于QObject的对象, 在释放的内存的时候, 会自动调用析构函数, 释放子对象的内存//故QPushButton bt1 bt2 bt3 bt4 会随着QWidget MainWidget的释放而自动调用子对象的析构函数, 释放子对象的内存

}voidMainWidget::myButtonReleasedSlot()

{if (bt2 !=nullptr)

{

bt2->setText(QString::fromLocal8Bit("发送信号, 槽处理完成 ..."));

}

}voidMainWidget::myChangeWin()

{this->hide();

sw->show();

}voidMainWidget::myDealSub()

{this->show();

sw->hide();

}void MainWidget::myDealSubParm(intnum, QString str)

{

qDebug()<< "num:" << num << "str:" <

qDebug()<< "num:" << num << "str:" <

qWarning()<< "num:" << num << "str:" <

qInfo()<< "num:" << num << "str:" <

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值