首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Qt 中 QButtonGroup 獲取被點擊 QPushButton 的 ID 與指標

     編輯:程式設計疑難解答

問題場景

將四個 QPushButton 加入 QButtonGroup,連線 buttonClicked(int) 訊號至槽函數。需求:點擊按鈕後獲取該按鈕的 ID 或指標,以便後續實現「選中按鈕 → 點擊其他位置移動該按鈕」的交互邏輯。

核心解法

QButtonGroup::buttonClicked(int id) 訊號的參數 正是被點擊按鈕的 ID,直接在槽函數接收即可:

// 建立按鈕群組
QButtonGroup *group = new QButtonGroup(this);
group->addButton(btn1, 1); // 指定 ID
group->addButton(btn2, 2);
group->addButton(btn3, 3);
group->addButton(btn4, 4);

// 連線訊號(Qt5 新語法)
connect(group, QOverload<int>::of(&QButtonGroup::buttonClicked),
        this, &MyClass::onButtonClicked);

// 槽函數
void MyClass::onButtonClicked(int id) {
    QPushButton *clickedBtn = qobject_cast<QPushButton*>(group->button(id));
    if (clickedBtn) {
        // 取得 ID 與指標,執行後續邏輯
        qDebug() << "Clicked button ID:" << id;
        qDebug() << "Button pointer:" << clickedBtn;
        // 記錄當前選中按鈕,供移動操作使用
        currentSelectedButton = clickedBtn;
    }
}

進階:若需獲取按鈕在群組中的索引而非自訂 ID

  • 使用 QButtonGroup::buttons() 取得按鈕列表,配合 indexOf() 查找索引。
  • 或連線 buttonClicked(QAbstractButton*) 重載訊號,直接獲得指標。

移動按鈕的實現提示

  1. 在 onButtonClicked 中記錄 currentSelectedButton。
  2. 在視窗/場景的 mousePressEvent 或目標區域的點擊處理中,判斷若有 currentSelectedButton,則呼叫 move() 或調整佈局位置。
  3. 注意按鈕父物件與座標系(全域/區域),必要時用 mapToGlobal()/mapFromGlobal() 轉換。

總結

QButtonGroup 的 buttonClicked(int) 訊號已直接提供按鈕 ID,配合 group->button(id) 即可獲取指標,無需額外查找。善用訊號參數,簡化邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved