2015-08-24 2 views
1

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é?

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

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? –

+0

Édité ma réponse. – talamaki

+0

Oui, ce code est beaucoup mieux merci beaucoup ... –

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) { 
    ... 
}