Как получить из QtObjects (lineedit, combobox)? - PullRequest
0 голосов
/ 11 июля 2019

enter image description here

Я сгенерировал объекты QWidget QTGui с помощью алгоритма for (int i = 0; i

Как это:

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

Когда я изменил значение в поле со списком или в процентах. Наконец, я хочу взять процент и значение comboBox. Как это:

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);
 }

1 Ответ

0 голосов
/ 11 июля 2019

Вы либо должны сохранять дескрипторы созданных вами объектов:

// 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 уникальное имя объекта.

или вы ищете все QLineEdit с и надеетесь, что их порядок четко определен:

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() вызовами.Это ничего не даст, кроме как создать предупреждение на консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...