QT父窗口和子窗口互相通信

这个问题上网查了好多,大神们都说的很简单,对于我这样的小白来说,理解起来就有点吃力了,下面记录一下,给自己留给笔记,也是给正在摸索中的小白们一点参考!

一  大家要明白如何建立子窗口:

   1 利用新建ui的方式来新建,我没有用这种方式,这里就先不说了!

   2 利用新建一个类,来建立一个窗口,这种方法其实很简单。下面我们就说这种方法:

  首先我们要新建一个你要建立串口的类,新建头文件,CPP文件,在头文件中定义类,以及你自己想要添加的控件和各种需要的函数声明。然后在CPP文件中定义函数,记得要初始化你要用到的变量。好啦,然后把头文件添加到你的主窗口的头文件中,在主窗口中定义一个你添加的头文件中的类,然后我们就可以利用show()函数或者是exec()显示子窗口了。两种方法体现在你要定义的子窗口是模态的还是非模态的。

二  显示出了子窗口之后,我们的文件就是如何让子窗口和父窗口通信了。

    大神们都说利用信号和槽通信!

    没错就是信号和槽,可是小白我不知啊!其实很简单!

     如何实现呢,这要看你是要子窗口给父窗口发送数据,还是父窗口给子窗口发送数据了,道理很简单,就是利用信号和槽的参数来传递数据。

    1 子窗口给父窗口发送数据,我们可以在子窗口中定义信号,然后在父窗口中定义槽,在父窗口中将槽和信号连接起来,这样,你子窗口中的事件触发了信号,父窗口中的槽就会被执行,数据也就传递过来了,signal(参数1,参数2),slot(参数1,参数2)。

    2 父窗口给子窗口发送数据,可以通过两种方式,第一种就是可以给自窗口的类中定义公有变量,然后在主窗口中改变此公有变量的值来达到传递的目的,第二种就是信号和槽的方式,通过在子窗口中定义槽,在主窗口中定义信号,然后连接,利用参数传递数据。

    就这么多,其实确实很简单,仅供大家参考,大神勿喷!



  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于 Qt 信号传递参数和子窗口的问题,我可以给你一些解释和示例。 在 Qt 中,信号是一种机制,用于对象之间的通信。当一个对象的状态发生变化时,它可以通过发射一个信号来通知其他对象,其他对象可以通过连接信号来响应这个信号。所以,信号之间是一种解耦的关系,方便代码的维护和扩展。 在子窗口中,子窗口可以通过信号将数据传递给窗口。具体来说,子窗口可以定义一个带参数的信号,然后在需要传递数据的地方通过 emit 关键字来发射这个信号窗口可以连接这个信号来接收这个数据,然后对数据进行处理。 下面是一个示例代码,演示了如何在子窗口中定义一个带参数的信号,并在窗口中连接这个信号来接收数据。 子窗口: ``` class ChildWindow : public QWidget { Q_OBJECT signals: void sendData(const QString& data); public: explicit ChildWindow(QWidget *parent = nullptr); private slots: void onButtonClicked(); private: QPushButton *m_button; }; ChildWindow::ChildWindow(QWidget *parent) : QWidget(parent) { m_button = new QPushButton("Send Data", this); connect(m_button, &QPushButton::clicked, this, &ChildWindow::onButtonClicked); } void ChildWindow::onButtonClicked() { QString data = "Hello, World!"; emit sendData(data); } ``` 窗口: ``` class ParentWindow : public QWidget { Q_OBJECT public: explicit ParentWindow(QWidget *parent = nullptr); private slots: void onChildDataReceived(const QString& data); private: ChildWindow *m_childWindow; QLabel *m_label; }; ParentWindow::ParentWindow(QWidget *parent) : QWidget(parent) { m_childWindow = new ChildWindow(this); connect(m_childWindow, &ChildWindow::sendData, this, &ParentWindow::onChildDataReceived); m_label = new QLabel(this); } void ParentWindow::onChildDataReceived(const QString& data) { m_label->setText(data); } ``` 在这个示例中,子窗口定义了一个名为 sendData 的信号,这个信号带有一个 QString 类型的参数。在按钮被点击时,子窗口会发射这个信号,并传递一个字符串数据。窗口通过连接这个信号 onChildDataReceived 来接收这个字符串数据,并将其显示在一个标签上。 希望这个示例可以帮助你理解 Qt信号传递参数和子窗口的机制。如果还有不清楚的地方,可以继续问我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值