1

如何提取我的 spinBox 的名称?我尝试查看很多文档,但是,我找不到任何可以显示每个子 spinBox 名称的内容。我尝试将结果更改为字符串。但是,我只是得到了我想象的地址的十六进制或长整数,而不是返回。

在此处输入图像描述

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";

}

请注意qDebug() << e因为这是我无法获取有关旋转框的一些信息的地方

4

3 回答 3

3

您尝试检索的名称是objectName每个派生类都具有QObject的属性。QObject调用objectName()以检索此值。

您也可以将其与该QObject::findChild()功能一起使用。

这应该得到你想要的:

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

并将输出:

"norm_spinBox_10" SpinBoxWrite

注意
这条线很危险:

QSpinBox* sp= (QSpinBox*)wSp;

使用qobject_cast而不是 C 风格的演员表。

于 2016-07-08T21:02:25.823 回答
0

没有直接的方法可以将变量的名称作为字符串获取。

但是,您可以使用 aQMap<QSpinBox*, QString>将每个微调框映射到其名称。

在构造函数中,您必须手动分配这些:

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

然后您可以使用以下方法简单地获取字符串:

QString name = map[ui->spinBox];
于 2016-07-08T20:54:13.930 回答
0

只需在设计器文件中为它们命名,然后使用该名称在 C++ 代码中检索它们。

QSpinBox* mySpinner = findChild<QSpinBox*>("myGivenName");
于 2016-07-08T21:23:13.820 回答