在Qt中,slots 关键字有什么用?

有下面的Qt代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

请问其中的 slots 是什么意思?

在 Qt 中,slots 关键字用于声明槽函数(Slot Function),槽是 Qt 的信号-槽(Signal-Slot) 机制的一部分。

信号-槽机制
Qt 使用 信号(Signal)槽(Slot) 进行对象间通信。一个对象可以发出信号,另一个对象可以使用槽函数来响应这个信号。这个机制主要用于 GUI 事件处理。

slots 关键字的作用
mainwindow.h 代码中:

private slots:
    void on_pushButton_clicked();
  • slots 关键字用于声明一个槽函数,表示这个函数可以连接到某个信号。
  • on_pushButton_clicked() 是一个槽函数,Qt 会在 pushButton 按钮被点击时调用它(如果在 .cpp 里连接了 clicked() 信号)。

示例:如何连接信号和槽

如果 mainwindow.ui 里有一个按钮 pushButton,那么 Qt 可能会自动连接信号和槽(使用 on_pushButton_clicked() 这种命名方式),但你也可以手动连接,手动连接的代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 手动连接信号和槽
    connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::on_pushButton_clicked);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QMessageBox::information(this, "提示", "按钮被点击了!");
}

总结

  1. slots 关键字用于声明槽函数,它是 Qt 信号-槽机制的一部分。
  2. 槽函数用于响应信号,例如按钮点击 (clicked())、窗口关闭 (close())、文本改变 (textChanged()) 等。
  3. Qt 允许自动或手动连接信号与槽。
  4. Qt 5 及以上版本slots 关键字可选,因为 Qt 允许使用 C++11lambda 表达式来替代传统槽函数。

你可以试试看这个代码,点击按钮后应该会弹出提示框!

你可能感兴趣的:(Qt,嵌入式,qt)