ZW3D二次开发_UI_ZsCcTableWidget表格控件

1.代码

cpp 复制代码
#define FormName (char*)"ZsCcTableWidget"
#define id1 1

void UI_普通对话框_ZsCcTableWidget()
{
	ZF_VOID(cvxFormShow(FormName));
}

//设置单元格的前景色
void cvxTableFgColorSet(char* form, int idTable, int row, int col, svxColor color)
{
	svxTableAt at;
	ZF_CALL(cvxTableAtSetInit(&at));
	at.Row = row;
	at.Col = col;
	at.SetFgColor = 1;
	at.FgColor = color;
	ZF_CALL(cvxTableAtSet(form, idTable, &at));
}

//设置表格大小适应内容
void cvxTableAutoSize(char* form, int idTable)
{
	svxTableAt at;
	ZF_CALL(cvxTableAtSetInit(&at));
	at.AutoSize = 3;
	at.AllowResize = 3;
	ZF_CALL(cvxTableAtSet(form, idTable, &at));
}

//表格控件初始化
void _UI_普通对话框_ZsCcTableWidget_Init()
{
	//设置行列数
	ZF_CALL(cvxTableSizeSet(FormName, id1, 0, 0));

	//插入列
	ZF_CALL(cvxTableColInsert(FormName, id1, 0));
	ZF_CALL(cvxTableColInsert(FormName, id1, 1));
	ZF_CALL(cvxTableColInsert(FormName, id1, 2));
	ZF_CALL(cvxTableColInsert(FormName, id1, 3));
	ZF_CALL(cvxTableColInsert(FormName, id1, 4));
	ZF_CALL(cvxTableColInsert(FormName, id1, 5));
	ZF_CALL(cvxTableColInsert(FormName, id1, 6));
	//删除列
	ZF_CALL(cvxTableColRemove(FormName, id1, 6));
	//设置列宽范围
	ZF_CALL(cvxTableSetHeaderSectionSize(FormName, id1, 100, FALSE));//最大列宽
	ZF_CALL(cvxTableSetHeaderSectionSize(FormName, id1, 30, TRUE));//最小列宽
	//获取表格列数
	int colCount = cvxTableColCnt(FormName, id1);
	WriteMessage("表格列数 = %d", colCount);
	//设置列标题
	const char* colHeaders[1024] = { "文字","复选框","下拉框","颜色","日期和时间","整数" };
	ZF_CALL(cvxTableSetHorHeaderList(FormName, id1, 6, colHeaders));
	//获取第0列列标题
	char colHeaderText[1024] = { 0 };
	ZF_CALL(cvxTableCellTextGet(FormName, id1, -1, 0, colHeaderText, sizeof(colHeaderText)));
	WriteMessage("第0列列标题 = %s", colHeaderText);
	//设置列标题可见性
	ZF_CALL(cvxTableHorHeaderVisibleSet(FormName, id1, TRUE));
	//设置标题对齐方式
	ZF_CALL(cvxTableSetHeaderAlignment(FormName, id1, FALSE, evxTableAlignFlag::VX_TABLE_ALIGN_RIGHT));
	//设置列宽模式
	ZF_CALL(cvxTableSetHeaderColResizeMode(FormName, id1, 0, evxTableResizeMode::VX_TABLE_RESIZE_MODE_RESIZETOCONTENTS));

	//插入行
	ZF_CALL(cvxTableRowInsert(FormName, id1, 0));
	ZF_CALL(cvxTableRowInsert(FormName, id1, 1));
	ZF_CALL(cvxTableRowInsert(FormName, id1, 2));
	//删除行
	ZF_CALL(cvxTableRowRemove(FormName, id1, 2));
	//获取表格行数
	int rowCount = cvxTableRowCnt(FormName, id1);
	WriteMessage("表格行数 = %d", rowCount);
	//设置行标题
	const char* rowHeaders[1024] = { "第0行","第1行" };
	ZF_CALL(cvxTableSetVerHeaderList(FormName, id1, 2, rowHeaders));
	//获取第0行行标题
	char rowHeaderText[1024] = { 0 };
	ZF_CALL(cvxTableCellTextGet(FormName, id1, 0, -1, rowHeaderText, sizeof(rowHeaderText)));
	WriteMessage("第0行行标题 = %s", rowHeaderText);
	//设置行标题可见性
	ZF_CALL(cvxTableVerHeaderVisibleSet(FormName, id1, TRUE));

	//设置某行或某列标题是否勾选
	ZF_CALL(cvxTableHeaderCellCheck(FormName, id1, TRUE, 1, TRUE));

	//设置第0行第0列的单元格内容(和图标)
	//cvxTableCellTextSet
	ZF_CALL(cvxTableCellTextSet2(FormName, id1, 0, 0, (char*)"第0行第0列", (char*)"MotBandAnal"));
	//获取第0行第0列的单元格内容
	char text[1024];
	ZF_CALL(cvxTableCellTextGet(FormName, id1, 0, 0, text, sizeof(text)));
	//cvxTableGetText
	WriteMessage("第0行第0列内容 = %s", text);
	//设置第0行第0列的单元格的鼠标悬停提示
	ZF_VOID(cvxTableCellTipSet(FormName, id1, 0, 0, (char*)"第0行第0列悬停提示"));
	//获取第0行第0列的单元格的鼠标悬停提示
	char tip[1024]{};
	ZF_VOID(cvxTableCellTipGet(FormName, id1, 0, 0, tip, sizeof(tip)));
	WriteMessage("第0行第0列鼠标悬停提示 = %s", tip);
	//设置第0行第0列的单元格的字体颜色
	ZF_VOID(cvxTableFgColorSet(FormName, id1, 0, 0, { 255,0,0 }));
	//将第0行第1列单元格设置为复选框并勾选
	ZF_CALL(cvxTableCheckSet(FormName, id1, 0, 1, TRUE));
	//获取第0行第1列单元格复选框的勾选状态
	int isChecked = cvxTableIsCheck(FormName, id1, 0, 1);
	WriteMessage("第0行第1列单元格复选框【%s】勾选", isChecked == 1 ? "已" : "未");
	//将第0行第2列单元格设置为下拉列表,下拉选项集合为字符串,用","分割
	ZF_CALL(cvxTableComboSet(FormName, id1, 0, 2, (char*)"下拉选项0,下拉选项1,下拉选项2"));
	//cvxTableComboSet2
	ZF_CALL(cvxTableComboSetOption(FormName, id1, 0, 2, 2, (char*)""));//设置选中项
	//将第1行第2列单元格设置为可输入型下拉列表
	//cvxTableInputComboSet(FormName, id1, 1, 2, "下拉选项0,下拉选项1,下拉选项2");
	ZF_CALL(cvxTableInputComboSet2(FormName, id1, 1, 2, (char*)"下拉选项0,LSM下拉选项1,WKL下拉选项2", (char*)"ICON1704,ICON1705,ICON1706"));
#if VX_API_VERSION >= 3005
	//设置下拉列表的前景色或背景色
	szwColor comboCellColor = {0,0,255};
	ZF_CALL(ZwUiTableCellColorSet(FormName, id1,0 , 1, 2, comboCellColor));
	//清除下拉列表的前景色或背景色
	ZF_CALL(ZwUiTableCellColorClear(FormName, id1, 1, 2));
#endif
	//获取第0行第2列单元格下拉列表选中项的索引及值
	int selectedIndex = -1;
	char selectedText[1024];
	ZF_CALL(cvxTableComboGet(FormName, id1, 0, 2, &selectedIndex, selectedText, sizeof(selectedText)));
	WriteMessage("第0行第2列选中值的索引是 = %d,值 = %s", selectedIndex, selectedText);
	//将第0行第3列单元格设置为颜色单元格
	svxColor trueColor = { 0,0,0 };
	int colorIndex = evxColor::VX_COLOR_RED;//红色
	int colorType = 1;//0-使用trueColor,1-使用colorIndex
	ZF_CALL(cvxTableColorSet(FormName, id1, 0, 3, &trueColor, colorIndex, colorType));
	WriteMessage("第0行第3列单元格设置颜色(evxColor) = %d", colorIndex);
	//获取第0行第3列单元格颜色单元格的颜色
	svxColor trueColor_get = { -1,-1,-1 };
	int colorIndex_get = -1;
	unsigned char colorType_get = -1;
	ZF_CALL(cvxTableColorGet(FormName, id1, 0, 3, &trueColor_get, &colorIndex_get, &colorType_get));
	WriteMessage("第0行第3列颜色的索引是 = %d", colorIndex_get);
	//将第0行第4列单元格设置为日期单元格
	ZF_CALL(cvxTableDateSet(FormName, id1, 0, 4, ((long)time((time_t*)NULL)), evxDateType::VX_DATE_ONLY));
	//获取第0行第4列日期单元格的值
	evxDateType dateType;
	int date = 0;
	ZF_CALL(cvxTableDateGet(FormName, id1, 0, 4, &date, &dateType));
	struct tm locTime;
	char buffer[80];
	time_t time = date;
	struct tm now_time;
	localtime_s(&locTime, &time);
	strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S %A", &locTime);
	WriteMessage("第0行第4列日期时间值 = %s", buffer);
	//将第0行第5列单元格设置为数字单元格(只能输入整数)
	ZF_CALL(cvxTableNumSet(FormName, id1, 0, 5, (char*)"2099"));
	//获取第0行第5列数字单元格的值
	char num[1024] = {};
	ZF_CALL(cvxTableNumGet(FormName, id1, 0, 5, num, sizeof(num)));
	WriteMessage("第0行第5列数字值 = %s", num);
#if VX_API_VERSION >= 3000
	//合并单元格
	ZF_CALL(ZwUiTableWidgetCellMerge(FormName, id1,0,1,5,5));
#endif
	//(拖动滚动条)确保第0行第5列在当前显示区域
	ZF_VOID(cvxTableVisSet(FormName, id1, 0, 5));
	//设置第1行第0列单元格的内容
	ZF_CALL(cvxTableCellTextSet(FormName, id1, 1, 0, (char*)"第1行第0列"));
	//设置第1行第0列单元格的可用性
	int state = 1;//0-不可编辑,不可选中;1-可选中不可编辑;2-可选中可编辑
	ZF_VOID(cvxTableCellEnableSet(FormName, id1, 1, 0, state));
	WriteMessage("设置第1行第0列单元格的可用性 = %d(0-不可编辑,不可选中;1-可选中不可编辑;2-可选中可编辑)", state);
	//调整表格大小适应内容
	ZF_VOID(cvxTableAutoSize(FormName, id1));

	//设置当前选中区域
	svxRectangle rectangle{0,0,1,1};
	ZF_CALL(cvxTableSetSelRange(FormName, id1,&rectangle,TRUE));
	//获取当前选中区域
	int selectedRangeNumber = 0;
	svxRectangle* pSelectedRanges = NULL;
	ZF_CALL(cvxTableGetSelRange(FormName, id1,&selectedRangeNumber,&pSelectedRanges));
	WriteMessage("当前选中区域的数量 = %d", selectedRangeNumber);
	ZF_VOID(cvxMemFree((void**)&pSelectedRanges));
	//获取所有选择
	ZF_CALL(cvxTableUnselectAll(FormName, id1));
	WriteMessage("已取消所有选择");
}

void _UI_普通对话框_ZsCcTableWidget_Cancel()
{

}

void _UI_普通对话框_ZsCcTableWidget_Reset()
{

}

void _UI_普通对话框_ZsCcTableWidget_Apply()
{

}

void _UI_普通对话框_ZsCcTableWidget_Okay()
{

}

int _UI_普通对话框_ZsCcTableWidget_form_cb(int formAction, int* unusedInteger)
{
	ZF_WriteThisFunctionName();
	if (formAction == evxFormAction::VX_FORM_INIT)
	{
		WriteMessage("对话框初始化");
		_UI_普通对话框_ZsCcTableWidget_Init();
	}
	else if (formAction == evxFormAction::VX_FORM_CANCEL)
	{
		WriteMessage("用户点击了"取消"按钮");
		_UI_普通对话框_ZsCcTableWidget_Cancel();
	}
	else if (formAction == evxFormAction::VX_FORM_RESET)
	{
		WriteMessage("用户点击了"重置"按钮");
		_UI_普通对话框_ZsCcTableWidget_Reset();
	}
	else if (formAction == evxFormAction::VX_FORM_APPLY)
	{
		WriteMessage("用户点击了"应用"按钮");
		_UI_普通对话框_ZsCcTableWidget_Apply();
	}
	else if (formAction == evxFormAction::VX_FORM_OKAY)
	{
		WriteMessage("用户点击了"确定"按钮");
		_UI_普通对话框_ZsCcTableWidget_Okay();
	}
	return 0;
}

/// <summary>
/// 控件的回调函数,由ZW3D自动调用
/// </summary>
/// <param name="formName">对话框的名称</param>
/// <param name="idField">控件的Id</param>
/// <param name="idItem">控件中正在操作的项</param>
/// <returns></returns>
//int _UI_普通对话框_ZsCcTableWidget_update_cb(char* formName, int idField, int idItem)
int _UI_普通对话框_ZsCcTableWidget_update_cb(char* formName, int idField, int idItem)
{
	ZF_WriteThisFunctionName();
	//获取回调参数
	svxTableCallBackParam param{};//这里必须初始化,不然后面使用cvxTableCallBackParamFree会引发崩溃
	ZF_CALL(cvxTableCallBackParamGet(FormName, id1, &param));
	WriteMessage("回调事件 = %s", ZF_EnumToString(evxTableEvent,param.evt));
	//根据回调触发原因做相应的操作
	switch (param.evt)
	{
	case VX_LEFT_DOUBLE_CLICK:
		WriteMessage("用户左键双击了第%d行第%d列", param.iRow, param.iCol);
		break;
	case VX_RIGHT_CLICK:
		WriteMessage("用户右击了第%d行第%d列", param.iRow, param.iCol);
		break;
	case VX_CELL_CLOSE_EDITOR:
	{
		evxTableCellType cellType;
		ZF_CALL(cvxTableTypeGet(FormName, id1, param.iRow, param.iCol, &cellType));
		if (cellType == VX_TABLECELL_TYPE_TEXT)
		{
			char text[1024];
			ZF_CALL(cvxTableCellTextGet(FormName, id1, param.iRow, param.iCol, text, sizeof(text)));
			WriteMessage("第%d行第%d列的内容更改为:%s", param.iRow, param.iCol, text);
		}
	}
	break;
	case VX_DATA_CHANGED://数据更改
	{
		evxTableCellType cellType;
		ZF_CALL(cvxTableTypeGet(FormName, id1, param.iRow, param.iCol, &cellType));
		switch (cellType)
		{
		case VX_TABLECELL_TYPE_COMBOBOX:
		{
			int selectedIndex = -1;
			char selectedText[1024];
			ZF_CALL(cvxTableComboGet(FormName, id1, 0, 2, &selectedIndex, selectedText, sizeof(selectedText)));
			WriteMessage("第%d行第%d列选中值的索引是 = %d,值 = %s", param.iRow, param.iCol, selectedIndex, selectedText);
		}
		break;
		case VX_TABLECELL_TYPE_CHECKBOX:
		{
			int isChecked = cvxTableIsCheck(FormName, id1, param.iRow, param.iCol);
			WriteMessage("第%d行第%d列勾选状态 = %d", param.iRow, param.iCol, isChecked);
		}
		break;
		case VX_TABLECELL_TYPE_NUMBER:
		{
			char num[32];
			ZF_CALL(cvxTableNumGet(FormName, id1, param.iRow, param.iCol, num, sizeof(num)));
			WriteMessage("第%d行第%d列的数字值更改为 = %s", param.iRow, param.iCol, num);
		}
		default:
			break;
		}
	}
	break;
	default:
		break;
	}
	//释放回调参数内存
	ZF_VOID(cvxTableCallBackParamFree(&param));
	return 0;
}

void UI_普通对话框_ZsCcTableWidget_注册回调函数_Init()
{
	ZF_CALL(cvxCmdFunc("ZsCcTableWidget_form_cb", _UI_普通对话框_ZsCcTableWidget_form_cb, VX_CODE_GENERAL));
	ZF_CALL(cvxCmdFunc("ZsCcTableWidget_update_cb", _UI_普通对话框_ZsCcTableWidget_update_cb, VX_CODE_GENERAL));
}

void UI_普通对话框_ZsCcTableWidget_注销回调函数_Exit()
{
	ZF_CALL(cvxCmdFuncUnload("ZsCcTableWidget_form_cb"));
	ZF_CALL(cvxCmdFuncUnload("ZsCcTableWidget_update_cb"));
}

2.UI

html 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="ZsCc::Form" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>448</width>
    <height>309</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <property name="functionName">
   <string notr="true">ZsCcTableWidget_form_cb</string>
  </property>
  <property name="mode">
   <enum>ZsCc::Form::Normal</enum>
  </property>
  <property name="persistent">
   <enum>ZsCc::Form::Temporary</enum>
  </property>
  <property name="form_pos" stdset="0">
   <stringlist>
    <string>base,CTR,0</string>
   </stringlist>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <property name="margin">
    <number>2</number>
   </property>
   <item row="0" column="0">
    <widget class="ZsCc::TableWidget" name="tableWidget">
     <property name="id" stdset="0">
      <number>1</number>
     </property>
     <property name="callback" stdset="0">
      <string>ZsCcTableWidget_update_cb</string>
     </property>
     <property name="eventsEnabled" stdset="0">
      <stringlist>
       <string>dbl_clk</string>
      </stringlist>
     </property>
    </widget>
   </item>
   <item row="1" column="0">
    <widget class="QDialogButtonBox" name="buttonBox">
     <property name="standardButtons">
      <set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset</set>
     </property>
     <property name="centerButtons">
      <bool>true</bool>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <customwidgets>
  <customwidget>
   <class>ZsCc::Form</class>
   <extends>QDialog</extends>
   <header>nui/CommonControls/CcForm.hpp</header>
   <container>1</container>
  </customwidget>
  <customwidget>
   <class>ZsCc::TableWidget</class>
   <extends>QTableWidget</extends>
   <header>nui/CommonControls/CcTableWidget.hpp</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections>
  <connection>
   <sender>buttonBox</sender>
   <signal>clicked(QAbstractButton*)</signal>
   <receiver>Form</receiver>
   <slot>onClickStandardButton(QAbstractButton*)</slot>
   <hints>
    <hint type="sourcelabel">
     <x>223</x>
     <y>67</y>
    </hint>
    <hint type="destinationlabel">
     <x>223</x>
     <y>40</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>
相关推荐
传奇开心果编程13 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程18 小时前
【现代声明式UI学与练】第4课 列表渲染与 key——如何高效渲染列表、key 的作用、列表重排时的状态保持
学习·flutter·react native·ui·swiftui·android jetpack
传奇开心果编程18 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
扶尔魔ocy19 小时前
【qt openGL入门笔记】FPS相机
qt·opengl
扶尔魔ocy21 小时前
qt openGL入门笔记】FPS相机和轨道相机
qt·opengl
尘客-追梦1 天前
qmake / jom / 影子构建:把编译管起来
开发语言·c++·qt
qeen871 天前
【QT】 信号与槽初始
开发语言·笔记·qt·学习
传奇开心果编程1 天前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
传奇开心果编程1 天前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
大圣编蚕2 天前
Rancher证书轮换过期导致不能访问UI问题处理
ui·rancher