qt/c++其它按钮控件(如QPushButton)实现单选效果-创新互联
效果:
创新互联建站主营清河网站建设的网络公司,主营网站建设方案,成都App制作,清河h5成都微信小程序搭建,清河网站营销推广欢迎清河等地区企业咨询以上三个按钮只能选择一个
两种方法:
1、利用map容器:QObject到索引以及索引到QObject的映射map。实现稍微繁琐一些,但是笔者觉得这个方法的可扩展性以及实用性等更好。
private:
std::mapmapUI;
std::mapmapIndex;
然后就是创建界面以及pushbutton按钮了
setWindowTitle(tr("CheckToRadio"));
resize(300, 400);//窗口
QVBoxLayout *pTopLayout = new QVBoxLayout(this);
pTopLayout->setContentsMargins(15, 15, 15, 15);
setLayout(pTopLayout);//垂直布局
QString strStyle = "QPushButton:checked{ background: rgb(86, 128, 200); font - weight: bold; }";
//按钮选择之后的颜色值以及字体变化
QPushButton *pBtn1 = new QPushButton(tr("pBtn1"),this);//按钮1
mapUI[pBtn1] = 1;
mapIndex[1] = pBtn1;
pBtn1->setCheckable(true);
pBtn1->setStyleSheet(strStyle);
pTopLayout->addWidget(pBtn1);
connect(pBtn1, &QPushButton::clicked, this, &CheckToRadio::OnClicked);
QPushButton *pBtn2 = new QPushButton(tr("pBtn2"), this);//按钮2
mapUI[pBtn2] = 2;
mapIndex[2] = pBtn2;
pBtn2->setCheckable(true);
pBtn2->setStyleSheet(strStyle);
pTopLayout->addWidget(pBtn2);
connect(pBtn2, &QPushButton::clicked, this, &CheckToRadio::OnClicked);
QPushButton *pBtn3 = new QPushButton(tr("pBtn3"), this);//按钮3
mapUI[pBtn3] = 3;
mapIndex[3] = pBtn3;
pBtn3->setCheckable(true);
pBtn3->setStyleSheet(strStyle);
pTopLayout->addWidget(pBtn3);
connect(pBtn3, &QPushButton::clicked, this, &CheckToRadio::OnClicked);
可以看到我用两个成员变量mapUI和mapIndex保存了按钮和索引之间的映射,接下来就是槽函数OnClicked的实现:
void CheckToRadio::OnClicked()
{
QPushButton *pBtn = (QPushButton *)sender();//获取所选择的按钮
unsigned int uID = mapUI[pBtn];//通过按钮获取索引
for (int i = 1; i<= mapUI.size(); i++)
{
QPushButton *pBtnTem = (QPushButton *)mapIndex[i];
if (i != uID)
{
pBtnTem->setChecked(false);
}else
pBtnTem->setChecked(true);
}
}
2、利用setAutoExclusive(bool)函数:
//只需要在定义按钮时,setAutoExclusive(true)就可以实现单选效果,但是
//要注意后续定义的按钮如果不进行处理的话也可能会有单选效果bug
QPushButton *pBtn1 = new QPushButton(tr("pBtn1"),this);
// mapUI[pBtn1] = 1;
// mapIndex[1] = pBtn1;
pBtn1->setCheckable(true);
pBtn1->setStyleSheet(strStyle);
pBtn1->setAutoExclusive(true);
pTopLayout->addWidget(pBtn1);
// connect(pBtn1, &QPushButton::clicked, this, &CheckToRadio::OnClicked);
QPushButton *pBtn2 = new QPushButton(tr("pBtn2"), this);
// mapUI[pBtn2] = 2;
// mapIndex[2] = pBtn2;
pBtn2->setCheckable(true);
pBtn2->setStyleSheet(strStyle);
pBtn2->setAutoExclusive(true);
pTopLayout->addWidget(pBtn2);
// connect(pBtn2, &QPushButton::clicked, this, &CheckToRadio::OnClicked);
QPushButton *pBtn3 = new QPushButton(tr("pBtn3"), this);
// mapUI[pBtn3] = 3;
// mapIndex[3] = pBtn3;
pBtn3->setCheckable(true);
pBtn3->setStyleSheet(strStyle);
pBtn3->setAutoExclusive(true);
pTopLayout->addWidget(pBtn3);
// connect(pBtn3, &QPushButton::clicked, this, &CheckToRadio::OnClicked);
比较方便快捷的方法,如果只希望实现单选效果,使用第二种方法即可,减少代码冗余。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
标题名称:qt/c++其它按钮控件(如QPushButton)实现单选效果-创新互联
标题链接:http://scyingshan.cn/article/cdojed.html