C++ 我想在Qt中获取我的自旋框的名称

C++ 我想在Qt中获取我的自旋框的名称,c++,qt,qspinbox,C++,Qt,Qspinbox,我如何才能提取我的旋转框的名称?我试着查看了很多文档,但是,我找不到任何可以显示每个子Spinbox名称的内容。我已尝试将结果更改为字符串。然而,我只是得到一个十六进制或长整型,我想象的地址,返回 QList spinboxs=findChildren(); //创建QSignalMapper对象 QSignalMapper*signalMapper=新的QSignalMapper(此); //循环浏览你的旋转框列表 QSpinBox*spinBox; foreach(旋转箱,旋转箱){ //

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

QList spinboxs=findChildren();
//创建QSignalMapper对象
QSignalMapper*signalMapper=新的QSignalMapper(此);
//循环浏览你的旋转框列表
QSpinBox*spinBox;
foreach(旋转箱,旋转箱){
//为每个旋转框设置映射
连接(spinBox、信号(valueChanged(int))、信号映射器、插槽(map());
信号映射器->设置映射(spinBox,spinBox);
}
//将统一映射(QWidget*)信号连接到spinboxWrite插槽
连接(信号映射器、信号(映射(QWidget*))、此、插槽(spinboxWrite(QWidget*));
.
.
.
void GuiTest::SpinBoxChanged(QWidget*wSp){
QSpinBox*sp=(QSpinBox*)wSp;//现在sp是指向发出valueChanged信号的QSpinBox的指针
int value=sp->value();//值是更改后的值
//在这里你想对他们做什么就做什么。

qDebug()无法直接将变量名作为字符串获取

但是,您可以使用
QMap
将每个旋转框映射到其名称

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

map[ui->spinBox] = "spinBox";
map[ui->spinBoxWithStrangeName] = "spinBoxWithStrangeName";
然后,您可以使用以下方法简单地获取字符串:

QString name = map[ui->spinBox];

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

您也可以将其与函数一起使用

这将得到您想要的:

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

使用C样式的转换。

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

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

有什么原因不能将它们存储为成员变量吗?给它们一个名称并用它来引用它们不是更容易吗?没有,因为这意味着要以某种方式查找该名称。
findChild
、一个映射、一个散列等的运行时开销可能比仅仅将指针作为成员变量来记住要大一个数量级。@tisaconundrum请注意我在“关于C样式强制转换的警告”中编辑的内容。另外:将
qobject\u cast
与函数结合使用,可以删除
QSignalMapper
QSpinBox* sp= (QSpinBox*)wSp;
QSpinBox* mySpinner = findChild<QSpinBox*>("myGivenName");