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>
相关推荐
东方不败之鸭梨的测试笔记3 小时前
UI自动化执行时,元素不在视野内,需要拖动滑动条才能找到,这种元素怎么处理?
运维·ui·自动化
qq_392807953 小时前
Qt 注册 C++ 给 QML 调用的几种方式
数据库·c++·qt
看客随心3 小时前
element-ui table表格 tr间距\行间距设置
vue.js·ui·elementui
_林枭_3 小时前
ZW3D二次开发_UI_ZsCcTreeView树控件
qt·ui·zw3d
wumingqilin3 小时前
Qt 中使用消息中心,一处发送,其他订阅处处理逻辑
qt
MR.P_H_4 小时前
QT创建新工程,无法正常编译(Kit套件无法正常配置)
开发语言·qt
UI设计兰亭妙微4 小时前
兰亭妙微UI色彩设计实战:黄金比例法则、心理学表达与行业适配逻辑
ui·ui设计公司
戴西软件4 小时前
乘用车车门结构侧面碰撞仿真全流程:PreSys + Ansys 实战操作
java·开发语言·python·ui·cae
森G4 小时前
28、视图基类 QAbstractItemView---------Model/View模型视图
c++·qt