評價: 0 回應: 1 閱覽: 93
置頂

關於大量同類widget的event function

大家好~

這個問題其實不僅限於Qt, 大概有GUI介面的環境都會遇到

只是想請問一下, 有沒有比較好的寫法..?

假設我的MainWindow中有16個PushButton

我想要讓每一個按鈕按下之後可以對自己的顏色做變化

單一個按鈕的source code應該會類似這樣:
void PushButton_1 () {
  PushButton_1->ChangeColor(xxx);
}

土砲方式就是長了16個像這樣的function

但是這樣不僅難看, 又不好維護

想請教各位前輩有沒有比較好的方式呢?

熱門回應

在 Qt 裡的正規解就是 QSignalMapper
這個東西可以自動把類似的 signals 集中管理

但就這個例子而言, 如果要改變的顏色都一樣, 只有 button 不一樣
那麼其實可以用 sender() 就好

connect(button1, SIGNAL(clicked()), this, SLOT(changeButtonColor()));
connect(button2, SIGNAL(clicked()), this, SLOT(changeButtonColor()));

...

void Receiver::changeButtonColor() {
    auto button = qobject_cast<MyButton *>(sender());
    button->changeColor(...);
}

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言