QT connect信号槽机制、快捷键的使用

目录

1.信号槽机制

connect:

 2.自定义信号槽

自定义信号槽的注意事项

信号槽的用法:

3.Lambda表达式:

[ ]的对象参数形式:

操作符重载函数参数: 

函数返回值 :

函数体:

4.快捷键


1.信号槽机制

QT的信号槽类似观察者模式,比如按钮被点击后会发出一个信号,如果有对象想接受这个信号,就会使用connect函数进行链接。当信号发出时,被连接的槽函数会被自动回调。

connect:

connect函数最常用的一般形式:connect(sender,signal,receiver,slot);

  • sender:发出信号的对象
  • signal:发送对象发出的信号
  • receiver:接收信号的对象
  • slot:接收对象在接收到信号之后所需要调用的函数
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
  
    Signal signal;  
    Slot slot;  
  
    // 建立信号和槽的连接  
    QObject::connect(&signal, &Signal::mySignal, &slot, &Slot::mySlot);  
  
    // 发出信号  
    signal.mySignal();  
  
    return app.exec();  
}

 2.自定义信号槽

在这段代码中,我们定义了一个名为MyWidget的自定义控件,其中包含了一个自定义的信号mySignal和一个与之对应的槽函数mySlot。当mySignal被发出时,mySlot将会被调用并输出一条消息到控制台。

#include <QObject>  
#include <QDebug>  
  
class MyWidget : public QWidget {  
    Q_OBJECT  
  
public:  
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {  
        // 连接信号和槽函数  
        connect(this, &MyWidget::mySignal, this, &MyWidget::mySlot);  
    }  
  
public slots:  
    void mySlot() {  
        qDebug() << "My widget slot function called!";  
    }  
  
signals:  
    void mySignal();  
};

自定义信号槽的注意事项

  • 发送者和接收者都需要是QObject 的子类(当然,槽函数是全局函数、Lambda表达式等无需接收者的时候除外);
  • 使用signals标记信号函数,信号是一个函数声明,返回void,不需要实现函数代码;
  • 槽函数是普通的成员函数,作为成员函数,会受到public、private.protected 的影响;
  • 使用emit在恰当的位置发送信号;
  • 使用QObject:connect()函数连接信号和槽。
  • 任何成员函数、static函数、全局函数和Lambda表达式都可以作为槽函数
     

信号槽的用法:

  • 一个信号可以和多个槽连接(会被逐一调用,但是调用顺序不确定)
  • 多个信号连接到一个槽(任意信号发出,槽就会被调用)
  • 一个信号可以连接到另一个信号(第一个信号发出后第二个信号被发出)
  • 槽可以被取消连接(当一个对象被delete后,自动取消所有连接到这个对象上的槽)
  • 在连接信号和槽的时候,槽函数可以使用Lambda表达式的方式进行处理

3.Lambda表达式:

C++11中Lambda表达式用于定义并创建匿名的函数对象简化编程工作。

组成:[函数对象参数](操作符重载函数参数)mutable或exception ->返回值{函数体}

[]表示lambda的开始,是必须存在的。

[ ]的对象参数形式:
  • 空:没有任何函数对象参数
  • =:可以使用Lambda所在作用范围内所有可见的局部变量。采用了值传递方式
  • &:可以使用Lambda所在作用范围内所有可见的局部变量。采用了引用传递方式
  • this:可以使用Lambda所在类的成员变量
  • &a:按引用传递传a
  • a,&b:a值传递,b引用传递
操作符重载函数参数: 

标识重载的()操作符的参数,无参时可以省略,参数可以通过按值和引用两种方式传递。

函数返回值 :

->返回值类型,标识函数返回值的类型,当返回值为void,或者函数体中只有一处return 的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。

函数体:

{}辨识函数的实现,不可以省略,但是函数体可以为空。

  connect(clearButton, &QPushButton::clicked, [=]() {
    nameCheckBox->setChecked(false);
    RFIDCheckBox->setChecked(false);
    statusCheckBox->setChecked(false);
    typeCheckBox->setChecked(false);

    nameFilterLineEdit->clear();
    RFIDFilterLineEdit->clear();
  });

 代码中就是连接了一个按钮的点击信号到一个Lambda函数。当点击按钮时,这个函数将会执行{}内的操作。

4.快捷键

Creator模式的快捷键包括:

  1. F1 键的作用是打开帮助文档,如果在函数名字或类名上按 F1,则可跳转到对应帮助文档。查看其详细用法。
  2. F2:跳转到函数定义。
  3. Shift+F2:在函数声明和定义之间切换。
  4. F4:在头文件和源文件之间切换。
  5. Ctrl+Space:自动补全。
  6. Ctrl+R:运行工程。
  7. Ctrl+I:自动对齐。
  8. Ctrl+/:注释行或取消注释行。
  9. Ctrl+Shift+<:折叠代码块。
  10. Ctrl+Shift+>:展开代码块。
  11. Ctrl+[:跳到代码块的头部。
  12. Ctrl+):跳到代码块的尾部。
  13. Ctrl+L:跳到某一行。
  14. Ctrl+F:查找替换当前选中的内容,按下Ctrl+F,会列出所有和你选的内容一样的语句。
  15. Ctrl+Shift+F:查找内容。
  16. F5:开始调试。
  17. Shift+F5:停止调试。
  18. F9:设置和取消断点。
  19. F10:单步前进。
  20. F11:单步进入函数。
  21. Shift + F11:单步跳出函数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Qt提供了用于捕捉和处理快捷键机制。你可以使用Qt信号机制来定义和处理快捷键。 以下是一个使用Qt的示例代码,演示如何捕捉和处理快捷键: ```cpp #include <QApplication> #include <QMainWindow> #include <QKeyEvent> class MainWindow : public QMainWindow { public: MainWindow() { // 设置快捷键 QAction* action = new QAction("Ctrl+C", this); action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C)); connect(action, &QAction::triggered, this, &MainWindow::handleShortcut); addAction(action); } protected: void keyPressEvent(QKeyEvent* event) override { // 捕捉键盘按键事件 if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_C) { handleShortcut(); } QMainWindow::keyPressEvent(event); } private slots: void handleShortcut() { // 处理快捷键操作 qDebug() << "捕捉到了Ctrl+C快捷键"; } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow window; window.show(); return app.exec(); } ``` 在上述代码中,我们创建了一个自定义的MainWindow类,继承自QMainWindow。在构造函数中,我们创建了一个QAction对象,并设置其快捷键为Ctrl+C。然后,我们将该QAction对象连接到一个函数handleShortcut,用于处理快捷键操作。 另外,我们还重写了MainWindow类的keyPressEvent函数,在其中捕捉键盘按键事件。如果按下的是Ctrl+C组合键,我们也会调用handleShortcut函数来处理快捷键操作。 需要注意的是,上述代码使用Qt信号机制来处理快捷键,因此需要在.pro文件中添加QT += core来引入Qt的核心模块。 通过以上示例,你可以在使用Qt开发的应用程序中捕捉和处理快捷键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值