如何从 Qt Objects(qlineedit,qcombobox) 中获取?

Posted

技术标签:

【中文标题】如何从 Qt Objects(qlineedit,qcombobox) 中获取?【英文标题】:How can I obtain from QtObjects(lineedit,combobox)? 【发布时间】:2019-07-11 11:00:58 【问题描述】:

我使用 for(int i=0; i

像这样:

i=0 1.Runner distance ,percentage = %80 Place = ComboBoxValue 
i=1 1.Runner distance ,percentage = %60 Place = ComboBoxValue

当我更改组合框或百分比值时。最后,我想取百分比和组合框的值。 像这样:

QString Runner1= QString(_Numberlabel->text() + label->text() + lineEdit->text() + comboBox->currentText()); QString Runner2= QString(_Numberlabel->text() + label->text() + lineEdit->text() + comboBox->currentText());

enter code here

for(int i=0; i < runnerList.size() ;i++)

Layout = new QHBoxLayout();
Layout->setSpacing(6);
_Numberlabel= new QLabel();
_Numberlabel->setObjectName(QString::fromUtf8("_Numberlabel"));
_Numberlabel->setText(QString("First Runner").arg(i+1).arg(runnerList[i][0]).arg(runnerList[i][1]));

 QFont font;
 font.setFamily(QString::fromUtf8("Calibri"));
 font.setPointSize(10);
 font.setBold(true);
 font.setWeight(75);
 _Numberlabel->setFont(font);

 Layout->addWidget(_Numberlabel);

 label = new QLabel();
 label->setObjectName(QString::fromUtf8("label"));
 label->setMaximumSize(QSize(60, 16777215));
 label->setFont(font);
 label->setText("Percantage:");
 Layout->addWidget(label);

 lineEdit = new QLineEdit();
 lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
 lineEdit->setMaximumSize(QSize(50, 16777215));
 lineEdit->setText("%");

 Layout->addWidget(lineEdit);
 comboBox = new QComboBox();
 comboBox->setObjectName(QString::fromUtf8("comboBox"));
 comboBox->setMinimumSize(QSize(0, 25));
 comboBox->setMaximumSize(QSize(90, 16777215));
 comboBox->addItem("1");
 comboBox->addItem("2");
 comboBox->addItem("3");
 comboBox->addItem("4");
 Layout->addWidget(comboBox);
 this->ui.verticalLayout->addLayout(Layout);
 

【问题讨论】:

您好,欢迎您! QtModules 是什么? 乍一看,我看不到您从 QLineEdit 和 QComboBox 获取数据的位置。请粘贴minimal reproducible example。 我在问题中添加了一张新图片。我想获取像 QString 这样的数据 last = QString(_Numberlabel->text() + label->text() + lineEdit->text() + comboBox->currentText()); 【参考方案1】:

要么需要保留您创建的对象的句柄:

// definition:
QList<QLineEdit*> lineEdits;
QList<QComboBox*> combos;

这些列表应该是类成员。

// usage:
for(int i=0; i < runnerList.size() ;i++)

    //...
    lineEdits << lineEdit;
    combos << comboBox;

然后,您可以稍后获取值:

... = QString(lineEdits[i]->text() + combos[i]->currentText());

或者您可以通过它们唯一的对象名称找到它们:

ui.verticalLayout->findChild<QLineEdit*>(QString("lineEdit_%1").arg(i))->text();
// I didn't try to compile this code!

为此,您需要为每个 QLineEdit / QComboBox 指定一个唯一的对象名称。

或者您搜索所有QLineEdits 并希望他们的顺序明确:

ui.verticalLayout->findChildren<QLineEdit*>("lineEdit")[i]->text();

免责声明:这一切都非常丑陋,但您应该能够看到它是如何工作的。

无论您的选择如何,请注意:

你的线路

_Numberlabel->setText(QString("First Runner").arg(i+1).arg(runnerList[i][0]).arg(runnerList[i][1]));

包含错误,因为您的 QString(...) 不包含占位符 %1%2、...,但后面是 .arg() 调用。除了在控制台上创建警告之外,这不会做任何事情。

【讨论】:

Martin 谢谢,您的帮助很大。你是国王。 不,我不是 :-),但我很高兴能帮上忙。

以上是关于如何从 Qt Objects(qlineedit,qcombobox) 中获取?的主要内容,如果未能解决你的问题,请参考以下文章

QT中,在QLineEdit控件中输入一个数值,比如0.2,如何获取这个数值来使用呢?

Qt串口数据显示

Qt--计算器的实现

如何使用自动添加的 Qt 元素

Qt - 在面板中动态添加 QLineEdit

Qt中QLineEdit使用总结