- task ui 布局
QGridLayout *gridLayout_3; QGroupBox *groupBox; hboxLayout = new QHBoxLayout(groupBox); hboxLayout->addWidget(label); hboxLayout->addWidget(shapeObject); QFormLayout *formLayout formLayout->setWidget(1, QFormLayout::LabelRole, labelfillet); formLayout->setWidget(2, QFormLayout::SpanningRole, treeView); formLayout->setWidget(3, QFormLayout::LabelRole, DeleteButton);
-
void DlgGetNeighborFaces::on_shapeObject_activated(int itemPos)
这段代码是同一个 Qt 对话框类的另一个成员函数,用于响应对象下拉列表中的条目被选中的事件。在函数中,首先将当前对象的指针(d->object)置为 nullptr,并清空树形视图的所有行(model->removeRows(0, model->rowCount()))。然后获取当前活动文档的指针(App::GetApplication().getActiveDocument()),如果指针为空则直接返回。
接着使用 Gui::WaitCursor 对象展示等待光标,以防止用户在读取复杂模型时对界面进行操作。接着从对象下拉列表中获取用户所选的对象名,并将其转换为 QByteArray 类型的 name 变量。随后通过调用 doc 的 getObject 函数来获取与该对象名对应的 App::DocumentObject 对象(docObj)。在获取到 docObj 后,将 d->object 的值设置为该对象,并调用 tool 对象的 getAllFacesOfASolidOfDocument 函数获取与该对象相关联的所有面(TopTools_IndexedMapOfShape allFace)。
接着调用 tool 对象的 getSelectedFaces 函数获取当前已经选择的面,并将它们保存到 selectedFaces 中。再调用 Gui::Selection().rmvSelection 函数取消选择当前对象上的所有元素。最终调用 tool 对象的 getAllNeighborFacesIdOfNoPlane 函数获取所有不在同一平面上但相邻的面,并将结果保存到 d->face_ids 中。
接下来向树形视图中插入 d->face_ids.size() 个行(model->insertRows(0, d->face_ids.size())),然后对于每个面,设置树形视图中的数据。具体来说,调用 model 对象的 setData 函数设置每个行的第一列为 "FaceX",其中 X 是 face id;第二、三列分别为面的曲率半径(Base::Quantity 类型);第一列还会根据当前是否选中该面而设置相应的 Qt::CheckStateRole 属性。
最后,在处理每个面时,会检查是否能够获取到该面的曲率半径信息,如果获取失败则弹出提示框并直接返回。
-
protected: bool eventFilter(QObject* target, QEvent* event); void findShapes(); void changeEvent(QEvent* e) override; virtual const char* getShapeType() const;
-
void findShapes();
这段代码定义了一个函数 findShapes(),该函数用于在当前激活的文档中查找所有类型为 Part::Feature 的对象,并将它们添加到界面上的下拉框 ui->shapeObject 中。如果当前已有选中的对象,则将其设为默认选中状态。具体来说,该函数首先获取当前激活的文档 activeDoc,并通过调用 getObjectsOfType(Part::Feature::getClassTypeId()) 函数获取文档中所有类型为 Part::Feature 的对象,并将这些对象存储在一个 std::vectorApp::DocumentObject* 类型的数组 objs 中。接着,遍历 objs 数组中的每个元素,将其名字作为一个选项添加到下拉框 ui->shapeObject 中,并使用 setItemData 函数将该对象的名称与在文档中的名称绑定。同时,如果该对象已被选中,则将当前选中的对象索引 current_index 设为该对象的索引 index,以便在添加完所有选项后将该选项设为默认选中状态。
最后,如果在整个文档中只有一个 Part::Feature 类型的对象,则将其默认设为选中状态,并触发 on_shapeObject_activated 槽函数。
-
void changeEvent(QEvent* e) override;
这段代码是一个重载函数 changeEvent(QEvent* e),用于处理特定的事件类型 QEvent::LanguageChange。
当接收到 QEvent::LanguageChange 事件时,该函数会执行以下操作:
获取当前下拉框 ui->shapeObject 的选中索引,并获取所有选项的名称和绑定的数据。 调用 ui->retranslateUi(this) 函数更新界面的翻译文本。 清空下拉框 ui->shapeObject 的所有选项,并重新添加之前保存的选项及其绑定的数据。 将下拉框 ui->shapeObject 的选中状态恢复到之前的索引位置。 遍历树形结构控件 ui->treeView 中的每个节点,将其用户自定义的数据(存储在 Qt::UserRole 中)转换为整数类型,并将其对应的翻译文本设置为“FaceX”,其中 X 是该节点所代表的面的编号。
如果接收到的事件类型不是 QEvent::LanguageChange,则调用 QWidget::changeEvent(e) 函数将事件交给其父类来处理。
-