从 QGridLayout 获取孩子 - Qt

Posted

技术标签:

【中文标题】从 QGridLayout 获取孩子 - Qt【英文标题】:Get children from QGridLayout - Qt 【发布时间】:2016-04-19 11:24:13 【问题描述】:

我想从 mainLayout 中的所有 QTextEdit 获取文本。这是我的结构。

mainLayout = new QGridLayout( centralWidget );
mainLayout->setSpacing(0);
for(int mr = 0; mr < 3; mr++)//ustvarim 3 vrstice

    for(int mc = 0; mc < 3; mc++)//ustvarim 3 stolpce
    
        QFrame * widget = new QFrame;
        widget->setFrameStyle(QFrame::Plain);
        widget->setFrameShape(QFrame::Box);

        QGridLayout * gridLayout = new QGridLayout(widget);
        gridLayout->setSpacing(0);
        gridLayout->setMargin(0);

        for(int r = 0; r < 3; r++)
        
            for(int c = 0; c < 3; c++)
            
                QTextEdit * tile = new QTextEdit("0");
                tile->setFrameStyle(QFrame::Plain);
                tile->setFrameShape(QFrame::Box);
                tile->setAlignment(Qt::AlignCenter);

                tile->setStyleSheet("font: 24pt ;");
                gridLayout->addWidget(tile, r, c, 1, 1, Qt::AlignCenter);
            
        
       mainLayout->addWidget(widget, mr, mc, 1, 1, Qt::AlignCenter);
    

我正在这样做,但运行时崩溃。我想我想念一些儿童结构的东西。

for (int idx = 0; idx < mainLayout - > count(); idx++) 
    QFrame * item = dynamic_cast < QFrame * > (mainLayout - > itemAt(idx));
    for (int id = 0; id < item - > children().count(); id++) 
        QGridLayout * tile1 = dynamic_cast < QGridLayout * > (item - > children().at(id));
        QTextEdit * tile = dynamic_cast < QTextEdit * > (tile1 - > children().at(0));
        QString s = tile - > toPlainText();
        std::cout << s.toStdString() << std::endl;
    

我的问题是,如何从这个结构中获取所有QtextEdit 文本?

【问题讨论】:

你为什么让你的生活如此艰难?只需将指向编辑器的指针存储为类(MainWindow)字段并使用它来代替本地值。 我同意马雷克的观点。而不是所有这些子查找操作,只需将您的 QTextEdits 存储在像 QVectorQList 这样的容器中。 【参考方案1】:

您无需深入研究布局。请尝试以下方法:

QList<QTextEdit*> textEdits = centralWidget->findChildren<QTextEdit *>()

【讨论】:

以上是关于从 QGridLayout 获取孩子 - Qt的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击 QPoint 获取 QGridLayout 项目?

如何从 QGridLayout 中的单元格中删除小部件

如何停止 QGridLayout 元素的扩展

【PyQt】网格布局 QGridLayout

删除 QGridLayout 中的所有间距

ExpandableListView:从孩子那里获取输入值