9 個數字按鈕(1-9)共用 `onDigitClicked()`,需知道是哪個按鈕觸發。
// 構造時設置 objectName
for (int i = 1; i <= 9; ++i) {
QPushButton* btn = new QPushButton(QString::number(i), this);
btn->setObjectName("btn_" + QString::number(i));
connect(btn, &QPushButton::clicked, this, &MyWidget::onDigitClicked);
}
// 共用 Slot
void MyWidget::onDigitClicked() {
QPushButton* btn = qobject_cast(sender());
if (!btn) return;
int digit = btn->objectName().split('_').last().toInt(); // 或 btn->text().toInt()
// 處理 digit...
}
舊代碼常見 `QSignalMapper`,現代 Qt **直接用 `sender()` + Lambda** 更簡潔:
for (int i = 1; i <= 9; ++i) {
QPushButton* btn = new QPushButton(QString::number(i));
connect(btn, &QPushButton::clicked, this, [this, i](){ handleDigit(i); });
}
Lambda 捕獲 `i` 避免 `sender()` 轉換開銷,編譯期內聯,性能最優。