#include "PropertyDataLinkEdit.h" #include "DialogDataLink.h" #include #include #include #include "vpControls/VControlObject.h" #include "vpControls/VTableControl.h" #include "vpControls/VPieChart.h" #include "vpControls/VButton.h" #include "WindowAppUiView.h" #include "WindowAppUiScene.h" PropertyDataLinkEdit::PropertyDataLinkEdit( QWidget* parent, const QString& strPropertyName ) : QWidget(parent) , m_strPropertyName(strPropertyName) { // 设置自定义属性在属性表中的显示风格 QHBoxLayout* layout = new QHBoxLayout(this); layout->setMargin(0); layout->setSpacing(0); // 数据连接信息输入框 m_editInput = new QLineEdit(this); m_editInput->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred)); // 增加... 按钮 QToolButton* button = new QToolButton(this); button->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred)); button->setText(QLatin1String("...")); layout->addWidget(m_editInput); layout->addWidget(button); setFocusPolicy(Qt::StrongFocus); setAttribute(Qt::WA_InputMethodEnabled); connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked())); //// 初始化控件名称和具体类型枚举值的对应关系 //m_ControlTypeNames.insert(CLASS_NAME_BUTTON, VALUE_TYPE::Control_Button); //m_ControlTypeNames.insert(CLASS_NAME_LABEL, VALUE_TYPE::Control_Label); //m_ControlTypeNames.insert(CLASS_NAME_CHECKBOX, VALUE_TYPE::Control_CheckBox); //m_ControlTypeNames.insert(CLASS_NAME_RADIOBOX, VALUE_TYPE::Control_RadioBox); //m_ControlTypeNames.insert(CLASS_NAME_GROUPBOX, VALUE_TYPE::Control_Groupbox); //m_ControlTypeNames.insert(CLASS_NAME_IMAGE, VALUE_TYPE::Control_Image); //m_ControlTypeNames.insert(CLASS_NAME_LINEDIT, VALUE_TYPE::Control_LineEdit); //m_ControlTypeNames.insert(CLASS_NAME_COMBOBOX, VALUE_TYPE::Control_ComboBox); //m_ControlTypeNames.insert(CLASS_NAME_LISTBOX, VALUE_TYPE::Control_Listbox); //m_ControlTypeNames.insert(CLASS_NAME_VALUECONTROL, VALUE_TYPE::Control_Value); //m_ControlTypeNames.insert(CLASS_NAME_PIECHART, VALUE_TYPE::Control_PieChart); //m_ControlTypeNames.insert(CLASS_NAME_WAVECHART, VALUE_TYPE::Control_Wavechart); //m_ControlTypeNames.insert(CLASS_NAME_TABLECONTROL, VALUE_TYPE::Control_Table); m_pControlObject = WindowAppUiScene::m_pCurrentObject; } PropertyDataLinkEdit::~PropertyDataLinkEdit() { } /// /// 获取用户设定的数据连接 /// /// DataLink PropertyDataLinkEdit::getValue() const { return this-> m_DataLink; } ///// ///// 保存控件类型名字,用于根据不同类型的控件显示不同的属性对话框数据 ///// ///// //void DesignerPropertyDataLinkEdit::setControlClass(const QString& className) //{ // // TODO: 此处绑定的时候需要知道这个Edit对应的是DataLink的哪个索引 // // // //if (m_ControlTypeNames.find(className) != m_ControlTypeNames.end()) // //{ // // this->m_DataLink.m_bindControlType = m_ControlTypeNames[className]; // //} // //else // //{ // // this->m_DataLink.m_bindControlType = VALUE_TYPE::Unknown_Type; // //} //} ///// ///// 保存绑定控件的指针 ///// ///// //void DesignerPropertyDataLinkEdit::setControlPtr(QObject* pControlObject) //{ // Q_ASSERT(pControlObject != nullptr); // // m_pControlObject = (VButton*)(pControlObject); //} /// /// 设置弹出属性对话框的初始值 /// 所有的控件都需要在这里实现数据链接数值的手工保存 /// /// void PropertyDataLinkEdit::setValue(const QString& datalinkString) { // 将用户设置的DataLink设置到界面中显示 m_editInput->setText(datalinkString); // 将最新的dataLink信息保存进控件信息中 // 2021-12-11 如果是简单控件类型,则直接设置 if (!m_pControlObject->isComplexControl()) { m_pControlObject->setDataLink(m_DataLink); } // 如果是复杂控件类型,则需要根据属性名字设置到对应的位置中 else { m_pControlObject->updateExPropertyDataLink(m_strPropertyName, m_DataLink); } } /// /// 点击...按钮弹出数据链接设置对话框 /// void PropertyDataLinkEdit::buttonClicked() { DialogDataLink dlg(m_strPropertyName, m_pControlObject, this->m_DataLink, this); if (dlg.exec() == QDialog::Accepted) { DataLink datalink = dlg.getValue(); //if (datalink != this->m_DataLink) //{ this->m_DataLink = datalink; // 发送信号 emit dataLinkChanged(datalink.toString()); //} } }