Qt如何知道按钮被点击
qt how to know that a pushbutton is clicked?
我正在尝试做一个程序,使一些操作与声音。我的问题是我有3个播放按钮和3个标签。我希望无论我点击播放按钮,其名称在按钮附近的标签应该播放的声音。我有一个没有任何参数的播放槽。那么,我该如何分别连接到带有每个标签的每个播放按钮呢?实际上,我可以写3个不同的play函数,但由于我还有一些其他的函数,它会太长,令人困惑。此外,我需要3个播放按钮,因为我想同时播放3个声音。
例如,通过连接所有按钮的点击信号到一个插槽,然后使用QObject::sender()来找出它是哪个按钮。
让我们假设你的按钮命名为pushButton, pushButton_2和pushButton_3,标签分别为label, label_2和label_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;
}
您还可以将三个按钮分配给QButtonGroup
并使用其信号void QButtonGroup::buttonClicked(int id)
,这将为您提供单击的按钮的id。只需确保事先设置每个按钮的id(例如在构造函数或某些初始化函数中)。通过这样做,您不必处理指针。
https://doc.qt.io/archives/qt - 4.8 -/- qbuttongroup.html # buttonClicked-2https://doc.qt.io/archives/qt - 4.8 -/- qbuttongroup.html # setId
在现代代码中,您应该使用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) {
...
}
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 问:如何使用C++中的按钮从窗口打开窗口
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 叮当不知道PTRDIFF_MAX?
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- Python中的for循环与C++有何不同
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 我想知道长双倍和双倍之间的区别
- 我需要知道编译器如何在cpp中使用析构函数
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 如何知道QDockWidget是否通过按钮或拖动它取消停靠
- 如何知道visual C++2010中单选按钮的可用属性
- 我需要检查一个接一个地知道哪个单选按钮在Qt组检查
- Qt如何知道按钮被点击