阐述
本文旨在说明实现的思路。
当窗口创建很多QPushButton或者QPushButton的子类的时候,若要实现在众多的按钮中,每次被点击的按钮被选中,下一次点击另一个按钮的时候,上一个被选中的按钮恢复被选中之前的颜色,可以使用下面这种实现。
思路
分4步:
1.创建按钮的时候,设置按钮可选中,使用函数setCheckable;
2.创建按钮的时候,将所有创建的按钮保存在一个容器中;
3.绑定按钮的点击信号与处理点击的槽函数;
4.定义类的全局变量,QPushButton*类型的指针,或者自定义的继承于QPushButton的按钮的指针,用来指向上一次被选中的按钮对象,构造函数中初始化该指针为nullptr,在按钮点击信号绑定的槽函数中,判断该指针是否为空,不为空时,将该指针所指向的对象设置为非选中,(即将上一次被选中的按钮设置为为选中),然后更新当前被选中的按钮为上一次选中的按钮。
大体实习如下:
//按钮可选中,选中下一个前将之前的先设置为未选中if (m_beforeCheckedBtn) {m_beforeCheckedBtn->setChecked(false);}saveBeforeBtnCheckedBtn();
上述代码中的函数的实现如下:
void saveBeforeBtnCheckedBtn()
{QMap<int,myButton*>::iterator it;for (it = m_idBtnMap.begin(); it != m_idBtnMap.end(); ++it) {if (it.value()->isChecked()) {myButton* temp = it.value();m_beforeCheckedBtn = temp;break;}}
}
上述代码只是部分,重在理解其大意。