QT中使用for循环访问控件的方法,首先要解决的是利用字符串来代替控件名称进而操作控件。

step1:解决字符串代替控件名称来操作控件
在Qt中,可以使用QObject::findChild()sender()来根据字符串获取控件的指针。

1.使用QObject::findChild()根据字符串获取控件的指针。例如,要根据字符串”button1”获取一个QPushButton控件:

QWidget* parentWidget = ...;  // 获取父对象的指针
QString buttonName = "button1";

QPushButton* button = parentWidget->findChild<QPushButton*>(buttonName);
if (button) {
    // 控件找到了,可以对其进行操作
}

2.使用sender()来获取发送信号的对象,并根据对象名称进行判断。这个方法适用于处理信号槽连接时的操作。例如,假设有一个按钮的点击事件和对应的槽函数onButtonClicked()

void MainWindow::onButtonClicked()
{
    QPushButton* button = qobject_cast<QPushButton*>(sender());
    if (button) {
        QString buttonName = button->objectName();
        // 根据按钮名称进行操作
    }
}

注意:在使用这两种方法时,确保为每个控件设置了唯一的objectName属性。

以QDoubleSpinBox为例,具体如下:

    QWidget *parentWidget = this;
    QString doubleSpinBoxName= "doubleSpinBox_2";
    QDoubleSpinBox *dSpinBox = parentWidget->findChild<QDoubleSpinBox*>(doubleSpinBoxName);
    if(dSpinBox)
    {
        qDebug() << "控件找到了";
        dSpinBox->setValue(1.11);
    }
    else
    {
        qDebug() << "未找到";
    }

step2:使用for循环来生成循环字符串