【问题标题】:How to iterate over and sort QGridLayout items如何迭代和排序 QGridLayout 项目
【发布时间】:2021-12-29 13:21:50
【问题描述】:

我有一个 QGridLayout 和 225 个孩子 QTextEdit。我需要根据每个QTextEdit 的位置使用它们的文本值填充QString board[15][15] 数组。如果我以 long 的方式这样做,我会这样做:

boardArray[0][0] = ui->box0x0->toPlainText();
boardArray[0][1] = ui->box0x1->toPlainText();
boardArray[0][2] = ui->box0x2->toPlainText();
...

这似乎是一个非常糟糕的解决方案。所以我决定遍历网格的QTextEdit 子节点,以便我可以操纵每个子节点;

QList<QTextEdit*> textEdits = ui->gridLayout->findChildren<QTextEdit *>();
for (QTextEdit* box : textEdits) {
    // We don't know where this box is though
    board[ ??? ][ ??? ] = box->toPlainText();
}

不幸的是,没有 QTextEdit.row 属性或任何东西,所以我不知道它们的顺序或如何填充我的 board 数组而不是随机的。

对于如何将QTextEdit 小部件组织到我的board 数组中,你们有什么想法吗?我不确定如何使用这种迭代技术来做到这一点。

【问题讨论】:

    标签: c++ loops qt sorting


    【解决方案1】:

    遍历网格布局应该可以工作,如下所示(我还没有测试过):

    for (int i{0}; i < ui->gridLayout->rowCount(); ++i)
    {
      for (int j{0}; j < ui->gridLayout->columnCount(); ++j)
      {
        auto* textEdit{static_cast<QTextEdit*>(ui->gridLayout->itemAtPosition(i, j)->widget()};
        board[i][j] = textEdit->toPlainText();
      }
    }
    

    【讨论】:

    • 当我运行这个或其他尝试从某个位置获取小部件的变体时遇到分段错误...不知道为什么
    • @GreenDev3 根据您的QGridLayout 的具体填充方式,您可能需要检查ui-&gt;gridLayout-&gt;itemAtPosition(i, j) 返回的值是否非空。
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2018-01-29
    • 1970-01-01
    • 2014-07-13
    • 2021-09-30
    相关资源
    最近更新 更多