qt如何知道按钮被点击了?

qt how to know that a pushbutton is clicked?

我想做一个程序,用声音进行一些操作。我的问题是我有 3 个播放按钮和 3 个标签。我希望无论我点击“播放”按钮,都应该播放名称在按钮附近的标签中的声音。 我有一个没有任何参数的播放槽。那么,我怎样才能分别连接到每个标签的每个播放按钮呢?实际上,我可以写 3 个不同的播放功能,但由于我还有一些其他功能,所以它会太长且令人困惑。另外,我需要 3 个播放按钮,因为我想同时播放 3 个声音。

例如,将所有按钮的 clicked 信号连接到一个插槽,然后使用 QObject::sender() 找出它是哪个按钮。

假设您的按钮名为 pushButton、pushButton_2pushButton_3 以及标签 标签,label_2label_3

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(play()));
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(play()));
    connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(play()));
}

void MainWindow::play()
{
    QString piece;
    QObject* button = QObject::sender();
    if (button == ui->pushButton)
    {
        piece = ui->label->text();
    }
    else if (button == ui->pushButton_2)
    {
        piece = ui->label_2->text();
    }
    else
    {
        piece = ui->label_3->text();
    }

    qDebug() << "Starting to play:" << piece;
}

在现代代码中,您应该使用 Qt 5 的 connect 语法,并在您的操作微不足道时简单地连接到仿函数,例如您的操作:

// Interface
#include "ui_MainWindow.h"

class MainWindow : public QMainWindow {
  Q_OBJECT
  Ui::MainWindow ui;
  QVector<QString> m_pieces;
  ...
public:
  explicit MainWindow(QWidget *parent = nullptr);
  void play(const QString &piece);
};

// Implementation
MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent)
{
  ui.setupUi(this);
  unsigned i = 0;
  for(auto *button :
        {&ui.pushButton_1, &ui.pushButton_2, &ui.pushButton_3}) {
    connect(button, &QPushButton::clicked, [this, i]{
      if (m_pieces.size() > i) play(m_pieces[i]);
    });
    i ++;
  }
}

void MainWindow::play(const QString & piece) {
  ...
}

您还可以将这三个按钮分配给 QButtonGroup 并使用其信号 void QButtonGroup::buttonClicked(int id),这会为您提供被单击按钮的 id .只需确保事先设置每个按钮的 ID(例如在构造函数或某些初始化函数中)。通过这样做,您不必处理指针。

https://doc.qt.io/archives/qt-4.8/qbuttongroup.html#buttonClicked-2 https://doc.qt.io/archives/qt-4.8/qbuttongroup.html#setId