C++编程之SOUI库listview学习(加入单选按钮)
来源:互联网 发布:我想开淘宝店 编辑:程序博客网 时间:2024/06/15 15:32
前言:在项目中碰到问题,要求用到listview显示数据,前面还需要提供按钮进行对某行数据选中(需求样式如下图:通过和UI协商,我才用了check控件)
大家都知道多个check在一起是独立的,不受影响,那么怎样使按钮可以支持单选呢?
先看看listview的xml文件:
<listview pos="58,76,@448,@188" name="lv_mission_list" dividerSize="5" wantTab="1" font="adding:-4" show="1"> <template itemHeight="30" colorHover="#dcf0f1" colorSelected="#dcf0f1" trackMouseEvent="0" > <window colorBkgnd="#A9A9A9" pos="99,[0,@1,@35" /> <check id="1" pos="38,8" name="check_choose_mission"/> <window colorBkgnd="#A9A9A9" pos="249,0,@1,@35" /> <text id="2" pos="100,5" height="20" width="148" font="face:微软雅黑:adding:-2" name="text_choose_mission_time" align="center" dotted="1" show="1">123456</text> <text id="3" pos="251,5" height="20" width="182" font="face:微软雅黑:adding:-2" name="text_choose_mission_name" align="center" dotted="1" show="1">123456</text> <window colorBkgnd="#A9A9A9" pos="0,32,@450,@1" /> </template> </listview>这就需要用代码去限制了(直接上代码,语言表达能力弱,各位大神指点批评)
ListViewAdapter.h
#pragma once#include "stdafx.h"#include <iostream>class CScanMissionListAdapter : public SOUI::SAdapterBase{public:CScanMissionListAdapter();virtual ~CScanMissionListAdapter();// 定义列表项目个数virtual int getCount() override;// 绘制每一行的样式virtual void getView(int position, SOUI::SWindow* pItem, pugi::xml_node xmlTemplate) override;// 初始化每一行的样式void _InitView(int position, SOUI::SWindow* pItem);// 勾选触发函数bool OnCheckClick(SOUI::EventArgs *pEvt);private:int* m_pCbxSel;INT m_nCurCheck;};
ListViewAdapter.cpp
#include "stdafx.h"#include "ListViewAdapter.h"CScanMissionListAdapter::CScanMissionListAdapter() : m_nCurCheck(-1){m_pCbxSel = new int[getCount()];memset(m_pCbxSel, 0, sizeof(int)*getCount());}CScanMissionListAdapter:: ~CScanMissionListAdapter(){delete[] m_pCbxSel;}// 定义列表项目个数int CScanMissionListAdapter::getCount(){return 6;}// 绘制每一行的样式void CScanMissionListAdapter::getView(int position, SOUI::SWindow* pItem, pugi::xml_node xmlTemplate){if (pItem->GetChildrenCount() == 0){pItem->InitFromXml(xmlTemplate);}_InitView(position, pItem);}// 初始化每一行的样式void CScanMissionListAdapter::_InitView(int position, SOUI::SWindow* pItem){SOUI::SWindow *pCheck = pItem->FindChildByID(1);if (pCheck != NULL){// 设置当前行号到 check 控件中去pCheck->SetUserData(position);// 绑定触发函数pCheck->GetEventSet()->subscribeEvent(SOUI::EVT_CMD,Subscriber(&CScanMissionListAdapter::OnCheckClick, this));// 勾选当前选中行pCheck->SetCheck(m_nCurCheck == position ? TRUE : FALSE);}}// 勾选触发函数bool CScanMissionListAdapter::OnCheckClick(SOUI::EventArgs *pEvt){// 从 UserData 中读取到当前被勾选的行号,存储到 m_nCurCheck 中去// 以便 getView 刷新后重设样式SOUI::SCheckBox* pCheck = SOUI::sobj_cast<SOUI::SCheckBox>(pEvt->sender);if (pCheck != NULL){m_nCurCheck = pCheck->GetUserData();}// 刷新当前的 listview,自动调用 getView 函数,重新绘制样式notifyDataSetChanged();return false;}
最后结果如图:
#include "stdafx.h"#include "ListViewAdapter.h"CScanMissionListAdapter::CScanMissionListAdapter() : m_nCurCheck(-1){m_pCbxSel = new int[getCount()];memset(m_pCbxSel, 0, sizeof(int)*getCount());}CScanMissionListAdapter:: ~CScanMissionListAdapter(){delete[] m_pCbxSel;}// 定义列表项目个数int CScanMissionListAdapter::getCount(){return 6;}// 绘制每一行的样式void CScanMissionListAdapter::getView(int position, SOUI::SWindow* pItem, pugi::xml_node xmlTemplate){if (pItem->GetChildrenCount() == 0){pItem->InitFromXml(xmlTemplate);}_InitView(position, pItem);}// 初始化每一行的样式void CScanMissionListAdapter::_InitView(int position, SOUI::SWindow* pItem){SOUI::SWindow *pCheck = pItem->FindChildByID(1);if (pCheck != NULL){// 设置当前行号到 check 控件中去pCheck->SetUserData(position);// 绑定触发函数pCheck->GetEventSet()->subscribeEvent(SOUI::EVT_CMD,Subscriber(&CScanMissionListAdapter::OnCheckClick, this));// 勾选当前选中行pCheck->SetCheck(m_nCurCheck == position ? TRUE : FALSE);}}// 勾选触发函数bool CScanMissionListAdapter::OnCheckClick(SOUI::EventArgs *pEvt){// 从 UserData 中读取到当前被勾选的行号,存储到 m_nCurCheck 中去// 以便 getView 刷新后重设样式SOUI::SCheckBox* pCheck = SOUI::sobj_cast<SOUI::SCheckBox>(pEvt->sender);if (pCheck != NULL){m_nCurCheck = pCheck->GetUserData();}// 刷新当前的 listview,自动调用 getView 函数,重新绘制样式notifyDataSetChanged();return false;}
最后结果如图:阅读全文
0 0
- C++编程之SOUI库listview学习(加入单选按钮)
- DataGrid加入单选按钮(C#)
- MFC学习之:对话框中的单选按钮(Radio)
- Android用户界面基础之CheckBox(复选按钮)、RadioButton(单选按钮)学习
- php学习笔记之动态生成一组单选按钮
- win32之单选按钮
- html之单选按钮
- 开始学习SOUI.
- SOUI开篇之作
- Android之复选按钮、单选按钮、开关按钮
- listview + 单选按钮 有时候会点击出现重复多次
- java swing中实现列表中加入单选按钮,单选按钮发生变化时能触发事件
- Windows编程基础--第15节 MFC之复选框及单选按钮
- C++ DirectUI库 SoUI
- soui介绍(转载)
- SWING组件学习5:单选按钮
- Android之单选按钮对话框
- Android之单选按钮对话框
- java泛型
- Leetcode解题笔记 64. Minimum Path Sum [Medium] 动态规划
- 神经网络浅讲:从神经元到深度学习
- Android show memory info cmd
- 深度学习发展简要笔记
- C++编程之SOUI库listview学习(加入单选按钮)
- dasasddgsfdiji
- Oracle 数据库的 dml 误操作使用闪回解决
- C++17 标准正式发布:开发者可更简单地编写和维护代码
- Uboot打补丁-mini2440打补丁-安装arm-linux-gcc 3.4.5
- 小结四及作业四
- Layer visibleRegion的计算过程
- 用2片74LS85实现2个8位二进制数比大小
- mysql--16110 limit