【问题标题】:QCheckbox name accessQCheckbox名称访问
【发布时间】:2014-09-11 08:48:21
【问题描述】:

我生成复选框如下:

foreach(QString filt, types){
    QCheckBox *checkbox = new QCheckBox(filt, this);
    checkbox->setChecked(true);
    vbox->addWidget(checkbox);
}

我需要按名称访问这些复选框,但它们的名称都相同?

我需要阅读它们显示的文字。

我该怎么办?

是否可以运行 for 循环并将 i 的值附加到复选框的末尾。所以实际上,复选框将被称为复选框[0]、复选框[1]等?

编辑:

我已将代码更改为以下内容:

for(int i=0; i<types.count(); ++i)
{
    QString filt = types[i];
    *checkboxCount = *checkboxCount + 1;
    QCheckBox *typecheckbox[i] = new QCheckBox(filt, this);
    typecheckbox[i]->setChecked(true);
    vbox->addWidget(typecheckbox[i]);
}

我认为这是一种动态命名复选框的方法,因此我可以遍历它们以从中获取文本值。

我在这行QCheckBox *typecheckbox[i] = new QCheckBox(filt, this);

收到错误“variable-sized object may not be initialized

对解决方案/替代方法有任何想法吗?

【问题讨论】:

    标签: c++ qt qobject qcheckbox qtwidgets


    【解决方案1】:

    如果您想稍后访问复选框,您可以使用find children method,如下所示:

    QStringList myStringList;
    QList<QCheckBox *> list = vbox->findChildren<QCheckBox *>();
    foreach (QCheckBox *checkBox, list) {
        if (checkBox->isChecked())
            myStringList.append(checkBox->text());
    }
    

    【讨论】:

    • 完美,我希望有这样的方法。使用您的方法,我将如何遍历复选框并获取每个复选框的文本。这个想法是我想将它传递给 QStringList。
    • 您似乎没有设置的文本或实际对象名称?
    • QCheckBox *checkbox = new QCheckBox(filt, this); - 我将文本设置为“filt”,但对象名称只是 *checkbox for more than 1 checkbox!
    • 为什么要关心对象名,尤其是不设置的时候?
    • 好吧,如果您是 this 的父母,或者您是 vbox 的父母,您必须在没有 vbox-&gt; 的情况下拨打 findChildren&lt;QCheckBox *&gt;();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2016-05-17
    相关资源
    最近更新 更多