1

自分の spinBoxes の名前を取得するにはどうすればよいですか? 多くのドキュメントを調べてみましたが、各子スピンボックスの名前を示すものは見つかりませんでした。結果を文字列に変更しようとしました。ただし、代わりに、想像したアドレスの Hex または Long Int が返されます。

ここに画像の説明を入力

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

0

変数の名前を文字列として直接取得する方法はありません。

ただし、 a を使用して、QMap<QSpinBox*, QString>各スピンボックスをその名前にマップできます。

コンストラクターでは、これらを手動で割り当てる必要があります。

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

次に、次を使用して文字列を簡単に取得できます。

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