PropertyDataLinkEdit.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #include "PropertyDataLinkEdit.h"
  2. #include "DialogDataLink.h"
  3. #include <QHBoxLayout>
  4. #include <QToolButton>
  5. #include <QFocusEvent>
  6. #include "vpControls/VControlObject.h"
  7. #include "vpControls/VTableControl.h"
  8. #include "vpControls/VPieChart.h"
  9. #include "vpControls/VButton.h"
  10. #include "WindowAppUiView.h"
  11. #include "WindowAppUiScene.h"
  12. PropertyDataLinkEdit::PropertyDataLinkEdit(
  13. QWidget* parent,
  14. const QString& strPropertyName
  15. )
  16. : QWidget(parent)
  17. , m_strPropertyName(strPropertyName)
  18. {
  19. // 设置自定义属性在属性表中的显示风格
  20. QHBoxLayout* layout = new QHBoxLayout(this);
  21. layout->setMargin(0);
  22. layout->setSpacing(0);
  23. // 数据连接信息输入框
  24. m_editInput = new QLineEdit(this);
  25. m_editInput->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred));
  26. // 增加... 按钮
  27. QToolButton* button = new QToolButton(this);
  28. button->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred));
  29. button->setText(QLatin1String("..."));
  30. layout->addWidget(m_editInput);
  31. layout->addWidget(button);
  32. setFocusPolicy(Qt::StrongFocus);
  33. setAttribute(Qt::WA_InputMethodEnabled);
  34. connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
  35. //// 初始化控件名称和具体类型枚举值的对应关系
  36. //m_ControlTypeNames.insert(CLASS_NAME_BUTTON, VALUE_TYPE::Control_Button);
  37. //m_ControlTypeNames.insert(CLASS_NAME_LABEL, VALUE_TYPE::Control_Label);
  38. //m_ControlTypeNames.insert(CLASS_NAME_CHECKBOX, VALUE_TYPE::Control_CheckBox);
  39. //m_ControlTypeNames.insert(CLASS_NAME_RADIOBOX, VALUE_TYPE::Control_RadioBox);
  40. //m_ControlTypeNames.insert(CLASS_NAME_GROUPBOX, VALUE_TYPE::Control_Groupbox);
  41. //m_ControlTypeNames.insert(CLASS_NAME_IMAGE, VALUE_TYPE::Control_Image);
  42. //m_ControlTypeNames.insert(CLASS_NAME_LINEDIT, VALUE_TYPE::Control_LineEdit);
  43. //m_ControlTypeNames.insert(CLASS_NAME_COMBOBOX, VALUE_TYPE::Control_ComboBox);
  44. //m_ControlTypeNames.insert(CLASS_NAME_LISTBOX, VALUE_TYPE::Control_Listbox);
  45. //m_ControlTypeNames.insert(CLASS_NAME_VALUECONTROL, VALUE_TYPE::Control_Value);
  46. //m_ControlTypeNames.insert(CLASS_NAME_PIECHART, VALUE_TYPE::Control_PieChart);
  47. //m_ControlTypeNames.insert(CLASS_NAME_WAVECHART, VALUE_TYPE::Control_Wavechart);
  48. //m_ControlTypeNames.insert(CLASS_NAME_TABLECONTROL, VALUE_TYPE::Control_Table);
  49. m_pControlObject = WindowAppUiScene::m_pCurrentObject;
  50. }
  51. PropertyDataLinkEdit::~PropertyDataLinkEdit()
  52. {
  53. }
  54. /// <summary>
  55. /// 获取用户设定的数据连接
  56. /// </summary>
  57. /// <returns></returns>
  58. DataLink PropertyDataLinkEdit::getValue() const
  59. {
  60. return this-> m_DataLink;
  61. }
  62. ///// <summary>
  63. ///// 保存控件类型名字,用于根据不同类型的控件显示不同的属性对话框数据
  64. ///// </summary>
  65. ///// <param name="className"></param>
  66. //void DesignerPropertyDataLinkEdit::setControlClass(const QString& className)
  67. //{
  68. // // TODO: 此处绑定的时候需要知道这个Edit对应的是DataLink的哪个索引
  69. //
  70. //
  71. // //if (m_ControlTypeNames.find(className) != m_ControlTypeNames.end())
  72. // //{
  73. // // this->m_DataLink.m_bindControlType = m_ControlTypeNames[className];
  74. // //}
  75. // //else
  76. // //{
  77. // // this->m_DataLink.m_bindControlType = VALUE_TYPE::Unknown_Type;
  78. // //}
  79. //}
  80. ///// <summary>
  81. ///// 保存绑定控件的指针
  82. ///// </summary>
  83. ///// <param name="pControlObject"></param>
  84. //void DesignerPropertyDataLinkEdit::setControlPtr(QObject* pControlObject)
  85. //{
  86. // Q_ASSERT(pControlObject != nullptr);
  87. //
  88. // m_pControlObject = (VButton*)(pControlObject);
  89. //}
  90. /// <summary>
  91. /// 设置弹出属性对话框的初始值
  92. /// 所有的控件都需要在这里实现数据链接数值的手工保存
  93. /// </summary>
  94. /// <param name="datalinkString"></param>
  95. void PropertyDataLinkEdit::setValue(const QString& datalinkString)
  96. {
  97. // 将用户设置的DataLink设置到界面中显示
  98. m_editInput->setText(datalinkString);
  99. // 将最新的dataLink信息保存进控件信息中
  100. // 2021-12-11 如果是简单控件类型,则直接设置
  101. if (!m_pControlObject->isComplexControl())
  102. {
  103. m_pControlObject->setDataLink(m_DataLink);
  104. }
  105. // 如果是复杂控件类型,则需要根据属性名字设置到对应的位置中
  106. else
  107. {
  108. m_pControlObject->updateExPropertyDataLink(m_strPropertyName, m_DataLink);
  109. }
  110. }
  111. /// <summary>
  112. /// 点击...按钮弹出数据链接设置对话框
  113. /// </summary>
  114. void PropertyDataLinkEdit::buttonClicked()
  115. {
  116. DialogDataLink dlg(m_strPropertyName, m_pControlObject, this->m_DataLink, this);
  117. if (dlg.exec() == QDialog::Accepted)
  118. {
  119. DataLink datalink = dlg.getValue();
  120. //if (datalink != this->m_DataLink)
  121. //{
  122. this->m_DataLink = datalink;
  123. // 发送信号
  124. emit dataLinkChanged(datalink.toString());
  125. //}
  126. }
  127. }