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, ¶m));
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(¶m));
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>