• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

学习了吗?

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

QT_学习笔记之弹出窗口(lambda表达式)

链接
https://www.cnblogs.com/pinking/p/10991850.html

include "widget.h"

include "QPushButton"

include "QLabel"

include "QDebug"

/*
任务:1,创建两个按钮,一个关闭一个开启
2.点击开启就新打开一个窗口
3.点击关闭就新关闭一个窗口
*/
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//定义两个按钮
QPushButton * btn1 = new QPushButton("开启",this);
btn1->move(0,0);

QPushButton * btn2 = new QPushButton("关闭",this);
btn2->move(0,100);
//设置窗口的大小,标题
resize(400,400);
setWindowTitle("test_windows");

//设置新窗口的标题,和内容,大小
QLabel newW = new QLabel("这是一个新窗口", this);
newW->setWindowFlag(Qt::Window);
newW->resize(300, 200);
newW->setWindowTitle("新窗口");
/

new QLabel("...", this) 只是父窗口内部的一个子控件,显示在父窗口内部,还会被父窗口裁剪
new QLabel("...", this) + setWindowFlag(Qt::Window) 变成独立窗口,有自己的标题栏、边框,可以单独移动 / 最小化
*/

//lambda表达式
connect(btn1, &QPushButton::clicked, this, = { //点击btn1按钮,则展示窗口
newW->show(); //newW
});

// 4. 点击「关闭」→ 关闭新窗口
connect(btn2, &QPushButton::clicked, this, = { //点击btn2按钮,则展示窗口
newW->close();
});

}

/*
任务:1,创建一个按钮,开始显示开启,按下显示关闭
2.点击开启就新打开一个窗口
3.点击关闭就新关闭一个窗口
*/

QPushButton *btn = new QPushButton(this);
btn->move(0,0);
resize(600,400);
btn->setText("开启");

// connect(btn, &QPushButton::clicked, this,={
// btn->setText("关闭");
// });

QLabel * newWindows = new QLabel(this);
newWindows->setWindowFlag(Qt::Window);
newWindows->resize(600,400);
newWindows->setText("这是一个新窗口");

connect(btn, &QPushButton::clicked, this, ={
if (newWindows->isVisible()) { // 窗口当前是显示的
newWindows->close();
btn->setText("开启");
} else { // 窗口当前是隐藏的
newWindows->show();
btn->setText("关闭");
}
});
}

Widget::~Widget()
{
}
注意事项:用 isVisible() 判断窗口状态(窗口的状态本身就是事实来源,不需要自己记);
第 1 次点显示,第 2 次点关闭,来回切换,永远不会崩。
记住这条规则
永远不要在槽函数里对同一个信号再次 connect。 连接要在信号发射之外建立好(比如构造函数里),槽里只写业务逻辑;需要根据状态分支就用 if 判断。如果你想要两个按钮分开控制,就像最早那段代码一样,给 “开启” 按钮和 “关闭” 按钮各自 connect 一次,而不是在槽里反复连接。

posted on 2026-09-08 15:55  学习了吗?  阅读(5)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3