Qt 在QML中,是否可以在GridLayout中创建行范围?

Qt 在QML中,是否可以在GridLayout中创建行范围?,qt,qml,Qt,Qml,在QML中,我想为网格的一行创建一个可操作的范围。原因是我希望能够在不触发整个网格重画的情况下,将网格内的一行标记为已删除,因为完全重画看起来非常刺耳,并导致GUI在重新处理所有行时暂停: 我想出了一个机械装置,但它看起来很粗糙: GridLayout { columns: 4; // header Text { Layout.alignment: Qt.AlignCenter; text: 'Red'; } Text { Layout.alignment: Qt.Ali

在QML中,我想为网格的一行创建一个可操作的范围。原因是我希望能够在不触发整个网格重画的情况下,将网格内的一行标记为已删除,因为完全重画看起来非常刺耳,并导致GUI在重新处理所有行时暂停:

我想出了一个机械装置,但它看起来很粗糙:

GridLayout {
  columns: 4;

  // header
  Text { Layout.alignment: Qt.AlignCenter; text: 'Red';   }
  Text { Layout.alignment: Qt.AlignCenter; text: 'Green'; }
  Text { Layout.alignment: Qt.AlignCenter; text: 'Blue';  }
  Text { Layout.alignment: Qt.AlignCenter; text: 'Remove?'; }

  Repeater {
    model: [
      {r: '100', g: '40', b:'27'},
      {r: '136', g: '63', b:'42'}
    ]
    Repeater {
      model: 4;
      property var pt : modelData;
      Loader {
        Component {
          id: _R;
          Text {
            text: pt.r;
            font.strikeout: !!pt.marked_for_deletion;
          }
        }
        Component {
          id: _G;
          Text {
            text: pt.g;
            font.strikeout: !!pt.marked_for_deletion;
          }
        }
        Component {
          id: _B;
          Text {
            text: pt.b;
            font.strikeout: !!pt.marked_for_deletion;
          }
        }
        Component {
          id: _Del;
          Button {
            width: text_input.font.pointSize*2;
            font.pointSize: text_input.font.pointSize*2;
            text: pt.marked_for_deletion ? '↶' :'-';
            onClicked: {
              pt.marked_for_deletion = !pt.marked_for_deletion;
              pt = pt;
            }
          }
        }
        sourceComponent: (
           index === 0 ? _R :
          (index === 1 ? _G :
          (index === 2 ? _B :
                         _Del)));

      }
    }
  }
}

没有嵌套在中继器内部的奇怪的
加载程序
有没有更好的方法?中继器是否可以在没有封闭组件的情况下返回多个元素?我不能将
与嵌套的
组件一起使用,因为列不会像表格一样对齐。

似乎是一种有效的方法。另一个可能是网格内的4个独立中继器(可能也很尴尬)。另一种可能是使用ColumnLayout(或
ListView
(不需要
Repeater
)或类似方法,然后为每行和每列委托集中使用RowLayout,例如
Layout.preferredWidth:gridParent.width*0.25
(要获得偶数列…还可以将一列设置为
Layout.fillWidth:true
).我从4个中继器开始,但后来我无法共享范围。如果我更改了
pt
,则其他
中继器将无法获得更新点。关于行布局的有趣想法。最终,这些选项似乎仍然有点麻烦。想要通过它们之间的依赖关系以交互方式调整一行似乎没有什么异国情调。谢谢您的建议。所有学员都应该可以访问同一模型数据行。。。不知道为什么你会看到其他的。可能是因为
标记了要删除的\u
是一个动态属性?当然,您正在使用的模型没有属性更改修改器信号,因此这也可能是一个问题(这是
pt=pt
用来通知整行已更改的吗?)。我同意这似乎是一个基本需求(我只是在做一些类似的动态表单布局,它需要数据模型中每行有2个大小一致的列(一个标签和一个表单控件)是的,代码< > Pt= Pt//Cube >行将更新。Qt中的JavaScript对象看起来好像是到处复制而不是通过引用。用C++来处理它们,一个俄罗斯娃娃问题。源代码是用一个必要的更改信号实现为<代码> QActuistListMys<代码>吗?r删除?我认为问题不在于重新绘制,而在于重新创建所有对象。