J'essaie de faire un programme qui fait quelques opérations avec des sons. Ma question est que j'ai 3 bouton-poussoir Play et 3 étiquettes. Je veux que celui que je clique sur le bouton Lecture, le son dont le nom est dans l'étiquette qui est près du bouton-poussoir devrait jouer. J'ai une fente de jeu sans aucun paramètre. Alors, comment puis-je me connecter à chaque bouton de lecture avec chaque étiquette respectivement? En fait, je peux écrire 3 fonctions de jeu différentes, mais comme j'ai d'autres fonctions, ce sera trop long et déroutant. En outre, j'ai besoin de 3 boutons de lecture parce que je veux jouer 3 sons simultanément.qt comment savoir qu'un bouton est cliqué?
1
A
Répondre
2
Par exemple en connectant le cliqués signaux de tous les boutons à une fente, puis utilisez QObject :: sender() pour savoir quel bouton il était.
Supposons que vos boutons sont nommés boutons-poussoirs, pushButton_2 et pushButton_3 et étiquettes étiquette , label_2 et label_3 respectivement.
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;
}
0
Dans le code moderne, vous devez utiliser la syntaxe de Qt 5 connect
et simplement se connecter à un foncteur lorsque votre action est trivial, comme la vôtre est:
// Interface
#include "ui_MainWindow.h"
class MainWindow : public QMainWindow {
Q_OBJECT
Ui::MainWindow ui; // not a pointer to make things easier
...
public:
explicit MainWindow(QWidget * parent = 0);
void play(const QString & piece);
};
// Implementation
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.pushButton_1, &QPushButton::clicked, [this]{
play("piece for button 1");
});
connect(ui.pushButton_2, &QPushButton::clicked, [this]{
play("piece for button 2");
});
connect(ui.pushButton_3, &QPushButton::clicked, [this]{
play("piece for button 3");
});
}
void MainWindow::play(const QString & piece) {
...
}
Merci très bonne idée. Mais, ma fonction de jeu est un slot qui ne prend pas un argument. Alors, comment puis-je faire cette chose avec ma fonction de lecture? –
Édité ma réponse. – talamaki
Oui, ce code est beaucoup mieux merci beaucoup ... –