Qt的槽函数的public,protected,private以及Qt4、5中的connect函数。

捋一捋,在Qt4、5中,信号与槽的一些细节。

先从Qt4、5中,用于连接信号和槽的connect函数开始讲起。

在Qt4中,connect函数的原型有以下3种:

bool connect(const QObject *, const char *,
             const QObject *, const char *,
             Qt::ConnectionType);
bool connect(const QObject *, const QMetaMethod &,
             const QObject *, const QMetaMethod &,
             Qt::ConnectionType);
bool connect(const QObject *, const char *,
             const char *,
             Qt::ConnectionType) const;

在Qt5中,connect函数的原型有以下5种:

QMetaObject::Connection connect(const QObject *, const char *,
                                const QObject *, const char *,
                                Qt::ConnectionType);
QMetaObject::Connection connect(const QObject *, const QMetaMethod &,
                                const QObject *, const QMetaMethod &,
                                Qt::ConnectionType);
QMetaObject::Connection connect(const QObject *, const char *,
                                const char *,
                                Qt::ConnectionType) const;
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
                                const QObject *, PointerToMemberFunction,
                                Qt::ConnectionType);
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
                                Functor);

在Qt4和Qt5的connect函数原型中,我们发现Qt5比Qt4多处了2种原型:

QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
                                const QObject *, PointerToMemberFunction,
                                Qt::ConnectionType);
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
                                Functor);
注意:这两种原型在Qt5中是可以传入信号和槽的“函数指针”的,通俗一点就是可以直接将“函数名”作为参数传进去,正是因为这一点,在写“槽”的时候就需要注意到public、protected和private的问题。

在以前的Qt4中,“信号和槽”是通过SIGNAL()和SLOT()的方式来连接的,现在可以使用“函数名”的方式来连接,就需要考虑到“函数名”是否有效,在将“槽”声明为protected和private的时候,在类外是不能直接通过对象来访问到该函数的,即:在类外使用connect并传入“函数名”时,将会编译不通过,此时需要将protected、private更改为public即可。

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt ,关闭窗口的函数可以通过重写 QWidget 类的 closeEvent() 函数来实现。closeEvent() 函数会在窗口关闭时自动调用,我们可以在这个函数添加我们想要执行的操作。 以下是一个示例代码: ```cpp class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget *parent = nullptr); protected: void closeEvent(QCloseEvent *event) override; }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { // ... } void MyWidget::closeEvent(QCloseEvent *event) { // 添加关闭窗口时要执行的操作 // ... event->accept(); // 接受关闭事件 } ``` 在上面的代码,我们重写了 closeEvent() 函数,并在其添加了要执行的操作。最后,我们调用了 QCloseEvent 对象的 accept() 函数来接受关闭事件。 当然,还可以利用 Qt 提供的信号与机制,来实现窗口关闭时自动执行函数的功能。例如: ```cpp class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget *parent = nullptr); private slots: void onWindowClose(); private: QPushButton *m_button; }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { m_button = new QPushButton(tr("Close"), this); connect(m_button, &QPushButton::clicked, this, &MyWidget::onWindowClose); } void MyWidget::onWindowClose() { // 添加关闭窗口时要执行的操作 // ... close(); // 关闭窗口 } ``` 在上面的代码,我们创建了一个 QPushButton 对象,并将其 clicked() 信号与 onWindowClose() 函数连接。当用户点击按钮时,会自动调用 onWindowClose() 函数。在这个函数,我们可以添加要执行的操作,并最终调用 close() 函数来关闭窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值