tisaconundrum
tisaconundrum

Reputation: 2292

I want to get the names of my spinboxes in Qt

How can I pull the names of my spinBoxes? I tried looking at a lot of the documentation, however, I couldn't find anything that would show the names of each of the child spinBoxes. I've tried changing the result to a string. However, I just get a Hex or Long Int, of the address I’d imagine, returned instead.

enter image description here

QList<QSpinBox*> spinBoxes= findChildren<QSpinBox*>();
    //create the QSignalMapper object
    QSignalMapper* signalMapper= new QSignalMapper(this);
    //loop through your spinboxes list
    QSpinBox* spinBox;
    foreach(spinBox, spinBoxes){
        //setup mapping for each spin box
        connect(spinBox, SIGNAL(valueChanged(int)), signalMapper, SLOT(map()));
        signalMapper->setMapping(spinBox, spinBox);
    }
    //connect the unified mapped(QWidget*) signal to your spinboxWrite slot
    connect(signalMapper, SIGNAL(mapped(QWidget*)), this, SLOT(spinboxWrite(QWidget*)));
.
.
.

void GuiTest::SpinBoxChanged(QWidget* wSp){
    QSpinBox* sp= (QSpinBox*)wSp;                   //now sp is a pointer to the QSpinBox that emitted the valueChanged signal
    int value = sp->value();                        //and value is its value after the change

    //do whatever you want to do with them here. . .
    qDebug() << value << "SpinBoxChanged";
}

void GuiTest::spinboxWrite(QWidget* e){
    SpinBoxChanged(e);
    QString* value = (QString*)e;
    qDebug() << e << value << " SpinBoxWrite";

}

Please note qDebug() << e as this is where I'm having trouble getting some information about the spinboxes

Upvotes: 1

Views: 1232

Answers (3)

RvdK
RvdK

Reputation: 19790

Just give them names in the designer file and then use that name to retrieve them in the C++ code.

QSpinBox* mySpinner = findChild<QSpinBox*>("myGivenName");

Upvotes: 0

jonspaceharper
jonspaceharper

Reputation: 4347

The name you are trying to retrieve is the objectName property, which every QObject and QObject-derived class has. Call objectName() to retrieve this value.

You can also use this with the QObject::findChild() function.

This should get what you want:

void GuiTest::spinboxWrite(QWidget* e){
    SpinBoxChanged(e);
    qDebug() << e->objectName() << " SpinBoxWrite";

And will output:

"norm_spinBox_10" SpinBoxWrite

Note
This line is dangerous:

QSpinBox* sp= (QSpinBox*)wSp;

Use qobject_cast instead of C-style casts.

Upvotes: 3

Mattia F.
Mattia F.

Reputation: 1740

There is no direct way to get the name of a variable as a string.

However, you can use a QMap<QSpinBox*, QString> to map each spin-box to its name.

In the constructor you have to assign these manually:

map[ui->spinBox] = "spinBox";
map[ui->spinBoxWithStrangeName] = "spinBoxWithStrangeName";

Then you can simply get the strings using:

QString name = map[ui->spinBox];

Upvotes: 0

Related Questions