ZW3D二次开发_UI_ZsCcTreeView树控件

1.代码

cpp 复制代码
#define FormName (char*)"ZsCcTreeView"
#define id1 1
static int nodeId0 = 0;//根节点ID

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

int _UI_普通对话框_ZsCcTreeView_插入节点(const char* label, int parentNode = 0)
{
	int siblingId = VX_INSERT_LAST;//兄弟节点
	int imgIdx = -1;
	int folderIdx = -1;
	evxTreeItemType nodeType = VX_ITEM;
	int dbIdx = -1;
	int nodeFlag = VX_TREE_IS_ENABLE + VX_TREE_IS_EDITABLE + VX_TREE_IS_DRAG_ENABLE + VX_TREE_IS_DROP_ENABLE + VX_TREE_IS_SELECTABLE;
	int outItemId = -1;
	const char* cmdName = NULL;
	ZF_CALL(cvxTreeAddItem(
		FormName,
		id1,
		parentNode,
		siblingId,
		label,
		imgIdx,
		folderIdx,
		nodeType,
		dbIdx,
		nodeFlag,
		&outItemId,
		cmdName));
	return outItemId;
}

//树控件初始化
void _UI_普通对话框_ZsCcTreeView_Init()
{
	//获取控件的宽高
	int treeHeader_width = 0;
	int treeHeader_height = 0;
	ZF_CALL(cvxTreeHeaderGetSize(FormName, id1, &treeHeader_width, &treeHeader_height));
	WriteMessage("获取控件的宽 = %d, 高 = %d", treeHeader_width, treeHeader_height);

	//插入列
	ZF_VOID(cvxTreeSetHeaderText(FormName, id1, 0, "序号"));
	ZF_VOID(cvxTreeSetColumnWidth(FormName, id1, 0, 100));
	ZF_VOID(cvxTreeSetHeaderText(FormName, id1, 1, "零件编号"));
	ZF_VOID(cvxTreeSetColumnWidth(FormName, id1, 1, 100));
	ZF_VOID(cvxTreeSetHeaderText(FormName, id1, 2, "零件名称"));
	ZF_VOID(cvxTreeSetColumnWidth(FormName, id1, 2, 100));
	ZF_VOID(cvxTreeSetHeaderText(FormName, id1, 3, "采购规格"));
	ZF_VOID(cvxTreeSetColumnWidth(FormName, id1, 3, 100));
	//获取列数
	int columnCount = cvxTreeGetColumnCount(FormName, id1);
	WriteMessage("获取树的列数 = %d", columnCount);
	//设置列数
	cvxTreeSetColumnCount(FormName, id1, ++columnCount);
	WriteMessage("设置树的列数 = %d", columnCount);
	//设置列标题对齐方式
	ZF_CALL(cvxTreeSetHeaderTextAlignment(FormName, id1,0, evxAlignFlag::VX_ALIGN_CENTER));
	ZF_CALL(cvxTreeSetHeaderTextAlignment(FormName, id1,1, evxAlignFlag::VX_ALIGN_CENTER));
	ZF_CALL(cvxTreeSetHeaderTextAlignment(FormName, id1,2, evxAlignFlag::VX_ALIGN_CENTER));
	ZF_CALL(cvxTreeSetHeaderTextAlignment(FormName, id1,3, evxAlignFlag::VX_ALIGN_CENTER));
	//获取列宽
	int colum_width = cvxTreeGetColumnWidth(FormName, id1, 0);
	WriteMessage("获取第0列的列宽 = %d", colum_width);
	//设置列宽
	ZF_VOID(cvxTreeSetColumnWidth(FormName, id1, 0, colum_width));
	WriteMessage("设置第0列的列宽 = %d", colum_width);
	//自动调整列宽
	//ZF_CALL(cvxTreeAutoResizeColumn(FormName, id1, 0));
	//获取列是否隐藏
	int isHidden = cvxTreeIsColumnHidden(FormName, id1, 0);
	WriteMessage("第0列%s", isHidden ? "隐藏":"没有隐藏");
	//设置列是否隐藏
	ZF_VOID(cvxTreeSetColumnHidden(FormName, id1, 0, isHidden));
	WriteMessage("设置第0列%s", isHidden ? "隐藏" : "不隐藏");
	//设置列图标
	ZF_VOID(cvxTreeSetHeaderIcon(FormName, id1, 0, "ICON1704"));

	//插入节点	
	nodeId0 = _UI_普通对话框_ZsCcTreeView_插入节点("一级节点0", 0);
	int nodeId1 = _UI_普通对话框_ZsCcTreeView_插入节点("一级节点1", 0);
	int nodeId2 = _UI_普通对话框_ZsCcTreeView_插入节点("一级节点2", 0);
	int nodeId3 = _UI_普通对话框_ZsCcTreeView_插入节点("一级节点3", 0);
	//删除节点及后辈节点
	ZF_CALL(cvxTreeDeleteItem(FormName, id1, nodeId3));
	WriteMessage("删除节点[%d]及后辈节点", nodeId3);
	//获取同级的上一个节点
	int previousId = -1;
	ZF_CALL(cvxTreeGetPrevSiblingItem(FormName, id1, nodeId1, &previousId));
	WriteMessage("节点【%d】同级的上一个节点 = %d", nodeId1,previousId);
	//获取同级的下一个节点
	int nextId = 0;
	ZF_CALL(cvxTreeGetNextSiblingItem(FormName, id1, nodeId1, &nextId));
	WriteMessage("节点【%d】同级的下一个节点 = %d", nodeId1, nextId);
	//插入子节点
	int childNodeId0 = _UI_普通对话框_ZsCcTreeView_插入节点("二级节点0", nodeId0);
	int childNodeId1 = _UI_普通对话框_ZsCcTreeView_插入节点("二级节点1", nodeId0);
	int childNodeId2 = _UI_普通对话框_ZsCcTreeView_插入节点("二级节点2", nodeId0);
	int childNodeId3 = _UI_普通对话框_ZsCcTreeView_插入节点("二级节点3", nodeId1);
	//删除节点的所有子结点
	ZF_CALL(cvxTreeDeleteSubItem(FormName, id1, nodeId1));
	//获取子节点
	int count_children = 0;
	ZF_CALL(cvxTreeGetChildrenCount(FormName, id1, nodeId0, &count_children));
	WriteMessage("节点[%d]共有[%d]个子节点:", nodeId0, count_children);
	for (int i = 0; i < count_children; i++)
	{
		int child_id = 0;
		ZF_CALL(cvxTreeGetChildItem(FormName, id1, nodeId0, i, &child_id));
		WriteMessage("--子节点[%d]", child_id);

		//获取父节点
		int parent_id = 0;
		ZF_CALL(cvxTreeGetParentItem(FormName, id1, child_id, &parent_id));
		WriteMessage("--子节点[%d]的父节点是[%d]", child_id, parent_id);
	}
	//获取节点的标志位
	int flag = -1;
	ZF_CALL(cvxTreeGetItemFlag(FormName, id1, nodeId0,&flag));
	WriteMessage("获取节点[%d]的标志位(evxTreeItemFlag的集合) = %d", nodeId0, flag);
	//设置节点的标志位
	ZF_CALL(cvxTreeSetItemFlag(FormName, id1,1,&nodeId0, flag));
	WriteMessage("设置节点[%d]的标志位(evxTreeItemFlag的集合) = %d", nodeId0, flag);
	//设置节点是否有勾选框
	ZF_CALL(cvxTreeSetItemCheckable(FormName, id1, nodeId0, TRUE));
	WriteMessage("设置节点[%d]有勾选框", nodeId0);
	//获取节点的勾选状态
	evxTreeCheckState checkState = cvxTreeGetItemCheckState(FormName, id1, nodeId0);
	WriteMessage("获取节点[%d]勾选状态 = %s", nodeId0, checkState ? "勾选了" : "没勾选");
	//设置节点(包括其子节点)的勾选状态
	ZF_VOID(cvxTreeSetItemCheckState(FormName, id1, nodeId0, checkState, TRUE));
	WriteMessage("设置节点[%d]勾选状态 = %s", nodeId0, checkState ? "勾选了" : "没勾选");
	//设置节点某一列的内容
	ZF_CALL(cvxTreeSetItemTextByColumn(FormName, id1, nodeId0, 1, "007"));
	//设置节点某一列的内容
	ZF_CALL(cvxTreeSetItemTextByColumn(FormName, id1, nodeId0, 2, "A"));
	//获取节点某一列的内容
	char text_colmn[128]{};
	ZF_VOID(cvxTreeGetItemTextByColumn(FormName, id1, nodeId0, 2, text_colmn, sizeof(text_colmn)));
	WriteMessage("获取节点[%d]第3列的内容 = %s", nodeId0, text_colmn);
	//设置节点某一列的文字颜色
	svxColor color{};
	ZF_CALL(cvxColorRGB(evxColor::VX_COLOR_RED, &color));
	ZF_CALL(cvxTreeSetItemTextColor(FormName, id1, childNodeId0, 0, &color));
	WriteMessage("设置节点[%d]第0列的文字颜色 = (R:%d,G:%d,B:%d)", nodeId0, color.r, color.g, color.b);
	//设置节点的图标
	ZF_CALL(cvxTreeSetItemIconNameByColumn(FormName, id1, nodeId1, 0, "ICON1704"));//ICON1704为内置图片,可参阅zw3d-command-dialog_2024\icons,也可用png图片的绝对坐标
	//获取节点展开状态
	int isExpand = cvxTreeItemIsExpand(FormName, id1, nodeId0);
	WriteMessage("获取节点[%d]展开状态 = %s", nodeId0, (isExpand == 1) ? "已展开" : "未展开");
	//设置节点展开状态
	ZF_CALL(cvxTreeExpandItem(FormName, id1, nodeId0, isExpand));
	WriteMessage("设置节点[%d]展开状态 = %s", nodeId0, (isExpand == 1) ? "已展开" : "未展开");
	//折叠所有节点
	ZF_VOID(cvxTreeCollapseAll(FormName, id1));
	WriteMessage("折叠所有节点");
	//展开所有节点
	ZF_VOID(cvxTreeExpandAll(FormName, id1));
	WriteMessage("展开所有节点");
	//获取节点是否选中
	int isSelected = cvxTreeIsItemSelected(FormName, id1, nodeId0);
	WriteMessage("获取节点[%d]选中状态 = %s", nodeId0, (isSelected == 1) ? "已选中" : "未选中");
	//获取节点数量
	WriteMessage("节点的数量 = %d", cvxTreeItemsCount(FormName, id1));

	//设置选择模式
	ZF_CALL(cvxTreeSetSelectionMode(FormName, id1,1/*单选*/));
}

void _UI_普通对话框_ZsCcTreeView_Cancel()
{

}

void _UI_普通对话框_ZsCcTreeView_Reset()
{

}

void _UI_普通对话框_ZsCcTreeView_Apply()
{

}

void _UI_普通对话框_ZsCcTreeView_Okay()
{

}

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

int _UI_普通对话框_ZsCcTreeView_update_cb_右键菜单(char* formName, int idField, int idItem)
{
	/*
	* 如果您的版本是ZW3D2024SP及之前的版本,则需要执行以下操作:
	*	关闭ZW3D
	*	打开文件"C:\Users\Administrator\AppData\Roaming\ZWSOFT\ZW3D\ZW3D 2024\custom\profiles\Default\4-Expert\Contexts.zcui",添加一个右键菜单
			<Menu name="API示例_右键菜单PopupBar" type="ZsCc::PopupBar" showCallback="" hideCallback="" custom="false">
			</Menu>		
	*	保存文件
	*/

	const char* menuName = "API示例_右键菜单PopupBar";
	//判断右键菜单是否已定义
	if (ZW_API_NO_ERROR == ZF_CALL(cvxPopupDefine(menuName)))
	{
		WriteMessage("右键菜单【%s】已定义", menuName);
	}
	else
	{
		WriteMessage("右键菜单【%s】未定义", menuName);
		return 0;
	}

	//移除所有菜单项
	//ZF_CALL(cvxPopupItemRemove(menuName, -1));//如果是删除.zcui中已存在的项则会返写入文件,如果是删除动态创建的项则不会

	char action[1024];
	sprintf_s(action, "~_UI_普通对话框_ZsCcTreeView_update_cb_右键菜单_回调(%d)", 111);
	//判断菜单项是否存在
	if (1 == cvxPopupItemIsExist(menuName, action))
	{
		WriteMessage("右键菜单【%s】中存在菜单项【%s】", menuName, action);
	}
	else
	{
		//插入菜单项
#if VX_API_VERSION >= 2900
		ZF_CALL(ZwUiPopupItemInsert(menuName, -1, "打开", action, NULL));//在菜单的最后插入一项
#else
		ZF_CALL(cvxPopupItemInsert(menuName, -1, "打开", action));//在菜单的最后插入一项
#endif
	}

	//获取所有菜单项
	int menuItemNumber = 0;
	ZF_CALL(cvxPopupMenuCnt(menuName,&menuItemNumber));
	WriteMessage("右键菜单【%s】中菜单项的数量 = 【%d】", menuName, menuItemNumber);
	for (int i = 0; i < menuItemNumber; i++)
	{
		//获取菜单项的显示文本
		char labelGet[1024];
		ZF_CALL(cvxPopupItemLabelGet(menuName, i, labelGet, sizeof(labelGet)));
		WriteMessage("===菜单项【%d】的显示文本 = 【%s】", i, labelGet);

		//获取菜单项对应的命令
		char actionGet[1024];
		ZF_CALL(cvxPopupItemActionGet(menuName, i, actionGet, sizeof(actionGet)));
		WriteMessage("===菜单项【%d】对应的命令 = 【%s】", i, actionGet);

		//设置菜单项的可用性
		ZF_CALL(cvxPopupItemSetEnabledByAction(menuName, actionGet,TRUE));

		//设置菜单项的可见性
		ZF_CALL(cvxPopupItemSetVisibleByAction(menuName, actionGet, TRUE));
		//获取菜单项的可见性
		int isVisible = -1;
		ZF_CALL(cvxPopupItemVisibleGet(menuName,i, &isVisible));
		WriteMessage("===菜单项【%d】可见性 = 【%d】",i,isVisible);
	}

	const char* subMenuName = "API示例_右键菜单PopupBar_子菜单";
	//移除(所有)子菜单项
	ZF_CALL(cvxPopupSubMenuItemRemove(menuName, subMenuName, -1));
	//ZF_CALL(cvxPopupSubMenuActionsRemove(menuName, subMenuName, -1,-1));
	//插入子菜单项
	sprintf_s(action, "~_UI_普通对话框_ZsCcTreeView_update_cb_右键菜单_回调(%d)", 666);
#if VX_API_VERSION >= 2900	
	ZF_CALL(ZwUiPopupSubMenuItemInsert(menuName, subMenuName, -1,"子菜单项666", action, "ICON315"));
#else
	ZF_CALL(cvxPopupSubMenuItemInsert(menuName, subMenuName, -1, action, "子菜单项666", action, "ICON315"));
#endif	
	//插入分割符
	ZF_CALL(cvxPopupSubMenuSeparatorInsert(menuName, subMenuName));
	sprintf_s(action, "~_UI_普通对话框_ZsCcTreeView_update_cb_右键菜单_回调(%d)", 777);
	ZF_CALL(cvxPopupSubMenuItemInsert(menuName, subMenuName, -1, action, "子菜单项777", action, "ICON315"));
	sprintf_s(action, "~_UI_普通对话框_ZsCcTreeView_update_cb_右键菜单_回调(%d)", 888);
	ZF_CALL(cvxPopupSubMenuItemInsert(menuName, subMenuName, -1, action, "子菜单项888", action, "ICON315"));
	//获取子菜单项数量
	int subMenuCount = 0;
	ZF_CALL(cvxPopupSubMenuCnt(menuName, subMenuName, &subMenuCount));
	WriteMessage("===【%s】子菜单项数量 = 【%d】", subMenuName, subMenuCount);
	//设置子菜单可见性
	ZF_CALL(cvxPopupSubMenuSetVisible(menuName, subMenuName, TRUE));

	//更新右键菜单
	ZF_CALL(cvxPopupUpdate(menuName));

	//显示右键菜单
	ZF_MIX(cvxPopupShow(menuName));

	return 0;
}

void _UI_普通对话框_ZsCcTreeView_update_cb_右键菜单_回调()
{
	ZF_WriteThisFunctionName();
}

//更新勾选框的函数,点击树节点的Label(文字部分)和Space(空白部分)都需要更新,所以单独做一个函数
void _UI_普通对话框_ZsCcTreeView_update_combobox(const svxTreeCbParam& treeCbParam) {
	if (!treeCbParam.itemIsDisabled && treeCbParam.item == nodeId0 && treeCbParam.column == 2) {//如果是nodeId0这行的第二列
		char currentValue[32];
		ZF_VOID(cvxTreeGetItemTextByColumn(FormName, id1, treeCbParam.item, treeCbParam.column, currentValue, sizeof(currentValue)));
		int currentIndex = 0;
		if (strcmp(currentValue, "B") == 0) 
		{
			currentIndex = 1;
		}
		else if (strcmp(currentValue, "C") == 0) 
		{
			currentIndex = 2;
		}
		ZF_CALL(cvxTreeEditItemByComboBox(FormName, id1, treeCbParam.item, treeCbParam.column, "A,B,C", NULL, currentIndex));//设置某一节点某一列为下拉选项
	}
}

//控件的回调函数,由ZW3D自动调用
int _UI_普通对话框_ZsCcTreeView_update_cb(char* formName, int idField, int idItem)
{	
	//获取回调函数的数据
	svxTreeCbParam treeCbParam{};
	ZF_CALL(cvxTreeGetCbParam(formName, idField, idItem, &treeCbParam));
	//回调触发原因	
	if (treeCbParam.mode == evxTreeEvent::VX_HOVER)//鼠标在控件中移动
	{
		return 0;
	}
	WriteMessage("回调触发原因 = %s",ZF_EnumToString(evxTreeEvent, treeCbParam.mode));
	//ZF_WriteThisFunctionName();
	switch (treeCbParam.mode)
	{
	case evxTreeEvent::VX_LEFT_DOWN://按下鼠标左键
		break;
	case evxTreeEvent::VX_LEFT_UP://松开鼠标左键
	{	
		//选中节点
		if (treeCbParam.item != -1)
		{
			ZF_CALL(cvxTreeUnselectAll(FormName, id1));//取消选中所有节点
			ZF_CALL(cvxTreeSelectItem(FormName, id1, treeCbParam.item));//选中节点
			int count = 0;
			int* pSelectedNodes = NULL;
			ZF_CALL(cvxTreeGetSelectedItems(FormName, id1,&count,&pSelectedNodes));
			WriteMessage("选中的节点 = %d", pSelectedNodes[0]);
			ZF_VOID(cvxMemFree((void**)&pSelectedNodes));
		}
		//鼠标点击的元素类型
		evxTreeHitPos hitPos = treeCbParam.uvxu.svxhit.pos;
		switch (hitPos)
		{
		case VXTHP_BUTTON:
			break;
		case VXTHP_ICON:
			break;
		case VXTHP_LABEL://用户点击了节点的内容
			char text[1024];
			ZF_VOID(cvxTreeGetItemTextByColumn(FormName, id1, treeCbParam.item, treeCbParam.column, text, sizeof(text)));
			WriteMessage("用户点击的内容为:%s", text);
			_UI_普通对话框_ZsCcTreeView_update_combobox(treeCbParam);//更新ComboBox
			break;
		case VXTHP_ITEM:
			break;
		case VXTHP_SPACE:
			_UI_普通对话框_ZsCcTreeView_update_combobox(treeCbParam);//更新ComboBox
			break;
		case VXTHP_CHECKBOX://用户点击了节点前的复选框?
			if (evxTreeCheckState::VX_TREE_ITEM_BLACK_CHECKED == cvxTreeGetItemCheckState(FormName, id1, treeCbParam.item))
			{
				ZF_VOID(cvxTreeSetItemCheckState(FormName, id1, treeCbParam.item, evxTreeCheckState::VX_TREE_ITEM_UNCHECKED, TRUE));
			}
			else
			{
				ZF_VOID(cvxTreeSetItemCheckState(FormName, id1, treeCbParam.item, evxTreeCheckState::VX_TREE_ITEM_BLACK_CHECKED, TRUE));
			}
			break;
		case VXTHP_APD_ICON1:
			break;
		case VXTHP_APD_ICON2:
			break;
		case VXTHP_HEADER:
			break;
		default:
			break;
		}	
	}
	break;
	case evxTreeEvent::VX_RIGHT_UP://松开鼠标右键
	{
		_UI_普通对话框_ZsCcTreeView_update_cb_右键菜单(formName, idField, idItem);
	}
	break;
	case evxTreeEvent::VX_DBL_LEFT://鼠标左键双击
	{		
		//获取节点某一列的内容
		char text_colmn[128]{};
		ZF_VOID(cvxTreeGetItemTextByColumn(FormName, id1, idItem, treeCbParam.column, text_colmn, sizeof(text_colmn)));
		ZF_CALL(cvxTreeEditItemByLineEdit(formName, idField, idItem, treeCbParam.column, text_colmn));
	}
	break;
	default:
		break;
	}
	return 0;
}

void UI_普通对话框_ZsCcTreeView_注册回调函数_Init()
{
	ZF_CALL(cvxCmdFunc("ZsCcTreeView_form_cb", _UI_普通对话框_ZsCcTreeView_form_cb, VX_CODE_GENERAL));
	ZF_CALL(cvxCmdFunc("ZsCcTreeView_update_cb", _UI_普通对话框_ZsCcTreeView_update_cb, VX_CODE_GENERAL));
	ZF_CALL(cvxCmdFunc("_UI_普通对话框_ZsCcTreeView_update_cb_右键菜单_回调", _UI_普通对话框_ZsCcTreeView_update_cb_右键菜单_回调, VX_CODE_GENERAL));
}

void UI_普通对话框_ZsCcTreeView_注销回调函数_Exit()
{
	ZF_CALL(cvxCmdFuncUnload("ZsCcTreeView_form_cb"));
	ZF_CALL(cvxCmdFuncUnload("ZsCcTreeView_update_cb"));
	ZF_CALL(cvxCmdFuncUnload("_UI_普通对话框_ZsCcTreeView_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">ZsCcTreeView_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::TreeView" name="treeView">
     <property name="id" stdset="0">
      <number>1</number>
     </property>
     <property name="callback" stdset="0">
      <string>ZsCcTreeView_update_cb</string>
     </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::TreeView</class>
   <extends>QTreeView</extends>
   <header>nui/CommonControls/CcTreeView.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>
相关推荐
wumingqilin2 小时前
Qt 中使用消息中心,一处发送,其他订阅处处理逻辑
qt
MR.P_H_2 小时前
QT创建新工程,无法正常编译(Kit套件无法正常配置)
开发语言·qt
UI设计兰亭妙微2 小时前
兰亭妙微UI色彩设计实战:黄金比例法则、心理学表达与行业适配逻辑
ui·ui设计公司
戴西软件2 小时前
乘用车车门结构侧面碰撞仿真全流程:PreSys + Ansys 实战操作
java·开发语言·python·ui·cae
森G3 小时前
28、视图基类 QAbstractItemView---------Model/View模型视图
c++·qt
不想看见4043 小时前
C++/Qt 使用 Tushare 获取股票信息
c++·qt·信息可视化
梵得儿SHI3 小时前
Vue 3 生态工具实战:UI 组件库与表单验证完全指南
前端·ui·vue3·elementplus·表单验证·antdesignvue·veevalidate
liwenzhuola15 小时前
解决 Ubuntu 上 Qt Creator 项目编译失败的问题
数据库·qt·ubuntu
娇娇yyyyyy15 小时前
QT编程(18): Qt QItemSelectionModel介绍
开发语言·qt