VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1238|回复: 11

[已解决]新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。

[复制链接]
75_avatar_middle
最佳答案
1 
online_vip 发表于 2021-9-7 20:54:36 | 显示全部楼层 |阅读模式
本帖最后由 滴水 于 2021-9-7 21:11 编辑

今天自学用QT写父窗口创建子窗口,然后子窗口给父窗口发送信号通信。
目前我可以通过父窗口创建子窗口后,在子窗口创建一个按钮(这里用到了QT的信号槽),当点击子窗口按钮时,可以成功投递信号到父窗口。
接着我想实现当子窗口显示出来后,主动发个信号给父窗口,意思告诉父窗口我显示出来了,但是我琢磨来琢磨去,不知道如何实现当子窗口显示出来后,主动发个信号告诉父窗口,百度了好久,尝试了都失败。新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。
上截图:
新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。




新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。





下面是主窗口头文件源码:
  1. #pragma once

  2. #include <QtWidgets/QMainWindow>
  3. #include "ui_QtWidgetsApplication1.h"
  4. #include "QSubWidget.h"

  5. class QtWidgetsApplication1 : public QMainWindow
  6. {
  7.     Q_OBJECT

  8. public:
  9.     QtWidgetsApplication1(QWidget *parent = Q_NULLPTR);

  10.     void ChangeWnd();
  11.     void DealSubWnd();
  12.    
  13. signals:
  14.    

  15. private:
  16.     Ui::QtWidgetsApplication1Class ui;
  17.     QSubWidget QSubWnd;
  18. };
复制代码


下面是主窗口.cpp
  1. #include "QtWidgetsApplication1.h"

  2. QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
  3.     : QMainWindow(parent)
  4. {
  5.     ui.setupUi(this);
  6.     ui.pushButton->setParent(this);
  7.     this->setWindowTitle("老大");

  8.     connect(ui.pushButton, &QPushButton::clicked, this, &QtWidgetsApplication1::ChangeWnd);
  9.     connect(&QSubWnd, &QSubWidget::MySignal, this, &QtWidgetsApplication1::DealSubWnd);
  10.    
  11. }


  12. void QtWidgetsApplication1::ChangeWnd()
  13. {
  14.     QtWidgetsApplication1::hide();

  15.     QSubWnd.show();
  16. }

  17. void QtWidgetsApplication1::DealSubWnd()
  18. {
  19.         QtWidgetsApplication1::show();

  20.         QSubWnd.hide();
  21. }
复制代码


下面是子窗口头文件源码:

  1. #pragma once

  2. #include <QWidget>
  3. #include "ui_QSubWidget.h"

  4. class QSubWidget : public QWidget
  5. {
  6.         Q_OBJECT

  7. public:
  8.         QSubWidget(QWidget *parent = Q_NULLPTR);
  9.         ~QSubWidget();

  10.         void Test();

  11. signals:
  12.         void MySignal();


  13. private:
  14.         Ui::QSubWidget ui;
  15. };
复制代码


下面是子窗口.cpp
  1. #include "QSubWidget.h"

  2. QSubWidget::QSubWidget(QWidget *parent)
  3.         : QWidget(parent)
  4. {
  5.         ui.setupUi(this);
  6.         //ui.pushButton.setParent(this);
  7.         this->setWindowTitle("小弟");

  8.         connect(ui.pushButton, &QPushButton::clicked, this, &QSubWidget::Test);

  9. }

  10. QSubWidget::~QSubWidget()
  11. {

  12. }



  13. void QSubWidget::Test()
  14. {
  15.         emit MySignal();
  16. }

复制代码



截图和源码,是我测试子窗口通过button按钮点击发送信号给父窗口的演示代码。
又来麻烦老师们指点指点如何实现当子窗口显示出来后,主动发个信号告诉父窗口,我显示出来了。
最佳答案
31_avatar_small
2021-10-6 23:35:37
本帖最后由 cpp2019 于 2021-10-6 23:54 编辑
滴水 发表于 2021-10-6 20:45
至今还没搞定,国庆出去转了一圈


录了个视频给你,https://streamja.com/BB6J9
QT窗口事件,鼠标事件,以及信号连接信号,信号连接槽的示例,看着电影写的,代码没优化比较乱,项目就不传了,窗体设计跟你这帖子里发的差不多,源码就那么简单的几句,视频里都看得到,如果需要项目文件可以上传给你。
新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。
新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。
新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。
新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。




上一篇:类的public那一讲中发现的问题
下一篇:一个简单的strcpy定义求助
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-9-8 15:11:53 | 显示全部楼层
  1. QSubWidget * sw = nullptr;
  2. sw = new QSubWidget(this);
  3. if(nullptr != sw)
  4. {
  5.     qDebug() << "子窗口创建成功";
  6. }
  7. //----------------
  8. 子窗口的各种事件中发送信号给主窗口,主窗口收到信息就证明创建成功,代码有点长就不写了。

  9. 帖子中写代码太累!
复制代码
57_avatar_middle
最佳答案
25 
在线会员 发表于 2021-9-14 11:32:18 | 显示全部楼层
子窗口头文件中声明:
  1. protected:
  2.         virtual void showEvent(QShowEvent* pEvent) override;
复制代码

子窗口cpp中实现:
  1. void QSubWidget ::showEvent(QShowEvent* pEvent) {
  2.     QWidget::showEvent(pEvent);
  3.     emit signalSubWidgetDisplayed();
  4. }
复制代码

父窗口关联信号和槽和你的子窗口按钮发送信号槽同理,这里就不写了

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 很给力!

查看全部评分

19_avatar_middle
最佳答案
12 
在线会员 发表于 2021-9-8 14:39:22 | 显示全部楼层
这个简单啊  直接在槽里面定义对话框类显示出来就行了啊
75_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2021-9-8 16:17:34 | 显示全部楼层

谢谢,你这几行代码,我能看懂,意思 new了一个子窗口,看返回值, 可是我想 在子窗口 实现 消息给父窗口,我再去琢磨琢磨, 先谢谢指点了
26_avatar_middle
最佳答案
0 
在线会员 发表于 2021-9-12 07:30:03 | 显示全部楼层
很复杂,我也不懂
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-9-15 23:38:36 | 显示全部楼层
还没搞定?理解了信号和槽就没什么难度!
75_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2021-10-6 20:45:18 | 显示全部楼层
cpp2019 发表于 2021-9-15 23:38
还没搞定?理解了信号和槽就没什么难度!

至今还没搞定,国庆出去转了一圈新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-10-6 23:35:37 | 显示全部楼层    本楼为最佳答案   
bestAnswer
本帖最后由 cpp2019 于 2021-10-6 23:54 编辑
滴水 发表于 2021-10-6 20:45
至今还没搞定,国庆出去转了一圈


录了个视频给你,https://streamja.com/BB6J9
QT窗口事件,鼠标事件,以及信号连接信号,信号连接槽的示例,看着电影写的,代码没优化比较乱,项目就不传了,窗体设计跟你这帖子里发的差不多,源码就那么简单的几句,视频里都看得到,如果需要项目文件可以上传给你。
75_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2021-10-9 08:18:55 | 显示全部楼层
cpp2019 发表于 2021-10-6 23:35
录了个视频给你,https://streamja.com/BB6J9
QT窗口事件,鼠标事件,以及信号连接信号,信号连接槽的 ...

早上好,谢谢这位网友的人心帮助,非常感谢,我这就去下载观看,如有不懂,我再厚着脸请教~多谢
75_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2021-10-9 18:53:45 | 显示全部楼层
cpp2019 发表于 2021-10-6 23:35
录了个视频给你,https://streamja.com/BB6J9
QT窗口事件,鼠标事件,以及信号连接信号,信号连接槽的 ...

下午琢磨了小半天,颇有收益,谢谢~新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-10-9 20:43:01 | 显示全部楼层
滴水 发表于 2021-10-9 18:53
下午琢磨了小半天,颇有收益,谢谢~

新手自学QT5.1.2 一个星期后,遇到新问题,再来求助。慢慢来!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-29 12:51

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表