首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt文件- xml顺序- QGridLayout行顺序导致很大的提交差异。

Qt文件- xml顺序- QGridLayout行顺序导致很大的提交差异。
EN

Stack Overflow用户
提问于 2020-12-27 05:49:28
回答 1查看 207关注 0票数 0

有时,在使用QT时,在生成的ui文件xml格式中,行的顺序不受尊重(row="11“出现在row=”0“之前)。

我知道在功能上它对编译的代码没有任何影响。我对这种行为有两种担忧:

( a)“小修改”产生的差异很大,这降低了我审查公共关系的能力,增加了疏忽的可能性。

( b)我有时从终端以文本模式编辑ui文件。对行进行排序是可取的。

对我来说更重要的是。

这个按下就是一个例子,它涉及三行的删除。

由于外部链接可能会被删除,我在这里包括一个相关的摘录,显示了这个问题:

代码语言:javascript
复制
        <layout class="QGridLayout" name="gridLayout_2">
-        <item row="0" column="0">
-         <widget class="QLabel" name="label_17">
+        <item row="11" column="0">
+         <widget class="QLabel" name="label_43">
           <property name="minimumSize">
            <size>
             <width>182</width>
@@ -31,27 +31,7 @@
            </size>
           </property>
           <property name="text">
-           <string>Default edge color</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="Gui::PrefColorButton" name="SketchEdgeColor">
-          <property name="toolTip">
-           <string>Color of edges</string>
-          </property>
-          <property name="color">
-           <color>
-            <red>255</red>
-            <green>255</green>
-            <blue>255</blue>
-           </color>
-          </property>
-          <property name="prefEntry" stdset="0">
-           <cstring>SketchEdgeColor</cstring>
-          </property>
-          <property name="prefPath" stdset="0">
-           <cstring>View</cstring>
+           <string>Fully constrained edit internal alignment edge color</string>
           </property>
          </widget>
         </item>
@@ -68,61 +48,28 @@
           </property>
          </widget>
         </item>
-        <item row="1" column="1">
-         <widget class="Gui::PrefColorButton" name="SketchVertexColor">
-          <property name="toolTip">
-           <string>Color of vertices</string>
-          </property>
-          <property name="color">
-           <color>
-            <red>255</red>
-            <green>255</green>
-            <blue>255</blue>
-           </color>
-          </property>
-          <property name="prefEntry" stdset="0">
-           <cstring>SketchVertexColor</cstring>
-          </property>
-          <property name="prefPath" stdset="0">
-           <cstring>View</cstring>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="0">
-         <widget class="QLabel" name="label_6">
-          <property name="minimumSize">
-           <size>
-            <width>182</width>
-            <height>0</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>Making line color</string>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="1">
-         <widget class="Gui::PrefColorButton" name="CreateLineColor">
+        <item row="6" column="1">
+         <widget class="Gui::PrefColorButton" name="InternalAlignedGeoColor">
           <property name="toolTip">
-           <string>Color used while new sketch elements are created</string>
+           <string>Color of edges of internal alignment geometry</string>
           </property>
           <property name="color">
            <color>
-            <red>204</red>
-            <green>204</green>
-            <blue>204</blue>
+            <red>178</red>
+            <green>178</green>
+            <blue>127</blue>
            </color>
           </property>
           <property name="prefEntry" stdset="0">
-           <cstring>CreateLineColor</cstring>
+           <cstring>InternalAlignedGeoColor</cstring>
           </property>
           <property name="prefPath" stdset="0">
            <cstring>View</cstring>
           </property>
          </widget>
         </item>
-        <item row="3" column="0">
-         <widget class="QLabel" name="label">

在某些情况下,即使是同一行()的第二列也出现在源中第一列()之后。

我确实理解,从功能的角度来看,顺序并不重要,并且不需要对行和cols进行排序。

我的问题是:是否有任何合理的方法(例如,Qt设计器的选项或插件,或者用于重新格式化ui文件的工具),以便在ui文件中对列进行排序,从而导致合理地检查差异?

提前谢谢你抽出时间,阿卜杜拉

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-18 16:49:20

这个python脚本将按行列顺序对Qt文件中任何QGridLayout部件的子项进行排序。

代码语言:javascript
复制
#!/usr/bin/env python
# encoding: utf-8

from __future__ import print_function

import logging
from lxml import etree


# Inspired from here: https://stackoverflow.com/a/46128043


def sort_children(node, klass, key):
    """ Sort children along tag and given attribute.
    if attr is None, sort along all attributes"""
    if not isinstance(node.tag, str):  # PYTHON 2: use basestring instead
        # not a TAG, it is comment or DATA
        # no need to sort
        return


    if node.get('class') == klass:
        # sort child along attr
        node[:] = sorted(node, key=key)
    else:
        # and recurse
        for child in node:
            sort_children(child, klass, key)


def sort(unsorted_file, sorted_file, klass, key):
    """Sort unsorted xml file and save to sorted_file"""
    tree = etree.parse(unsorted_file)
    root = tree.getroot()
    sort_children(root, klass, key)

    sorted_unicode = etree.tostring(root,
                                    pretty_print=True,
                                    encoding='unicode')
    with open(sorted_file, 'w') as output_fp:
        output_fp.write('<?xml version="1.0" encoding="UTF-8"?>\n')
        output_fp.write('%s' % sorted_unicode)
        logging.info('written sorted file %s', sorted_unicode)


filename = "Path_to_unsorted_QML_file.ui"
filename_out = "Path_to_sorted_QML_file.ui"

def row_col_key(node):
    """Return the sorting key of an xml node"""
    row = node.get('row') if node.get('row') else -1
    col = node.get('column') if node.get('column') else -1

    return '{:04d}{:04d}'.format(int(row), int(col))


sort(filename, filename_out, "QGridLayout", row_col_key)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65463217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档