当前位置: 首页 > news >正文

Qt技巧(二)-滑动界面,轮询控件,循环操作控件

在Qt界面开发过程中,我们常常要对同类部件,具有同样功能的一系列部件进行操作,比如:
在这里插入图片描述
这个页面该怎么设计,中间的几个选项该怎么操作?

我们在主工程中添加一个设计师界面类,类名设置为“BrandForm”。
里边的每个选项以QPushButton来做,分别命名为:“btBrand1”,“btBrand2”,“btBrand3”…
将这些Button放在QScrollArea里,以实现上下滑动。
一个按钮怎么做成上图中的样式呢,样式表就可以实现:

QPushButton#btBrand1,
QPushButton#btBrand2,
QPushButton#btBrand3,
QPushButton#btBrand4,
QPushButton#btBrand5{background-image: url(:/image/Image/rbNormal.png);background-repeat: no-repeat;background-origin: padding;background-position: right center;padding-left:10px;padding-right:30px;border: none;border-radius: 4px;font: bold normal 24px "Source Han Sans CN";color: rgba(66, 66, 66, 1);background-color: rgba(255, 255, 255, 1);text-align: left;width: 280px;height: 58px;outline: none;
}
QPushButton#btBrand1:pressed,
QPushButton#btBrand1:checked,
QPushButton#btBrand2:pressed,
QPushButton#btBrand2:checked,
QPushButton#btBrand3:pressed,
QPushButton#btBrand3:checked,
QPushButton#btBrand4:pressed,
QPushButton#btBrand4:checked,
QPushButton#btBrand5:pressed,
QPushButton#btBrand5:checked{color: rgba(177, 32, 41, 1);background-image: url(:/image/Image/rbSelected.png);
}

接下来怎么实现这几个按钮的排他性呢,也就是点了这个,其他的就变成未点击状态呢?
通过设置这几个Button的属性,选中“checkable”使能选中属性,选中“autoExclusive”互斥模式这两个属性即可。如下:

在这里插入图片描述
当然,你也可以通过代码形式来实现,将这几个Button放在一个QButtonGroup组中也可以。

    ui->btBrand1->setCheckable(true);ui->btBrand2->setCheckable(true);ui->btBrand3->setCheckable(true);ui->btBrand4->setCheckable(true);ui->btBrand5->setCheckable(true);if(nullptr == btGroup){btGroup = new QButtonGroup(this);btGroup->addButton(ui->btBrand1);btGroup->addButton(ui->btBrand2);btGroup->addButton(ui->btBrand3);btGroup->addButton(ui->btBrand4);btGroup->addButton(ui->btBrand5);}btGroup->setExclusive(true);

两种方式都可以了,选其一即可。

接下来用代码实现滑动,并连接按钮的点击信号

//设置滑动ui->scrollArea->verticalScrollBar()->style()->polish(ui->scrollArea->verticalScrollBar());QScroller::ScrollerGestureType gesture = QScroller::LeftMouseButtonGesture;QScroller::scroller(ui->scrollArea)->grabGesture(ui->scrollArea, gesture);ui->scrollArea->verticalScrollBar()->setValue(0);
//按钮点击connect(ui->btBrand1, &QPushButton::clicked, this, [=](){m_strName = ui->btBrand1->text();});connect(ui->btBrand2, &QPushButton::clicked, this, [=](){m_strName = ui->btBrand2->text();});connect(ui->btBrand3, &QPushButton::clicked, this, [=](){m_strName = ui->btBrand3->text();});connect(ui->btBrand4, &QPushButton::clicked, this, [=](){m_strName = ui->btBrand4->text();});
//获取你选择的名字
ui->label.setText(m_strName);

接下来我想对这些品牌轮询怎么操作呢?

//假定有5个选项
int nCount = 5;for(int n=0; n< nCount; n++){QString strName = QString("btBrand") + QString::number(n+1);//重点是这个findChild按object的名称找到对应子对象QPushButton *cbFind = this->findChild<QPushButton*>(strName);if(cbFind->isChecked()){//轮询一圈,找到你要操作的那一个//比如设置名称cbFind->setText("");//比如设置大小cbFind->setFixedSize(labelSize);//比如设置可见cbFind->setVisible(false);}}

学会了么

http://www.lryc.cn/news/430898.html

相关文章:

  • 003——单链表
  • XILINX平台下LINUX DMA驱动调研
  • Oracle数据库安装和配置指南
  • 制造业中工艺路线(工序)与产线(工作中心)关系
  • 目标跟踪算法——ByteTrack算法原理解析
  • C语言编译的过程
  • 前端面试题——栈与队列、动态路由、链表
  • Java算法之计数排序(Counting Sort)
  • 【系统架构设计师-2012年】综合知识-答案及详解
  • webpack4手动搭建Vue项目
  • Python爬虫所需的技术及其原理(简单易懂)
  • FxFactory 8 for Mac 视觉特效插件包安装
  • 将语义分割的标签转换为实例分割(yolo)的标签
  • QT 遍历ini配置文件
  • ecmascript和javascript的区别详细讲解
  • 【Python报错已解决】“ModuleNotFoundError: No module named ‘timm‘”
  • 「图::存储」链式邻接表|链式前向星(C++)
  • 《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 10数据中心中的BGP
  • unity游戏开发——标记物体 一目了然
  • vue 项目打包图片没有打包进去问题解决
  • TCP的传输速度
  • 直播间的“骆驼”比沙漠还多?刀郎演唱会惊现“骆驼”
  • Android Studio gradle下载太慢了!怎么办?(已解决)
  • 安卓版Infuse来了 打造自己的影视墙
  • 【Python时序预测系列】高创新模型:基于xlstm模型实现单变量时间序列预测(案例+源码)
  • Ubuntu 22.04 系统中 ROS2安装
  • Vue内置指令v-once、v-memo和v-pre提升性能?
  • OpenHarmony轻松玩转GIF数据渲染
  • torch.clip函数介绍
  • 西北工业大学oj题-兔子生崽