Название: C++ (Qt) не вижу фокус spinBox
Отправлено: eu7bz от Февраль 22, 2022, 13:02
Всем доброго дня! Я только начал изучать С++, по этому прошу не пинать! И так, попробую разъяснить что мне нужно сделать. Создал отдельный виджет QFrame. Отдельный потому что не хочу все сваливать в кучу в MainWindow. В виджете установлено 10 spinBox, все они зациклены от 0 до 9, нужно что бы они работали как счетчик, то есть кручу один spinBox и по прохождению его цикла добавлялась или отнималась 1 впереди стоящего spinBox. Созданный слот frontchangespinBox() работает без вопросов и мне там все понятно, он добавляет или уменьшает значение впереди стоящего spinBox. Если указываю конкретно на определенный spinBox, это строки 50 и 51, то все работает но только по указанному spinBox. Через QVector<QSpinBox*> spinbox; сделал список spinBox, то есть могу просто указать номер spinBox от 0 до 9. Но вот как мне определить какой я кручу spinBox что бы передать его номер в переменную spin для дальнейшей работы, я не знаю. Да я по ходу вообще запутался как мне это сделать. Прошу по возможности у кого есть желание помочь старому радиолюбителю! [code#include <QDebug> #include "vfoab.h" #include "ui_vfoab.h"
VfoAB::VfoAB(QWidget *parent) : QFrame(parent), ui(new Ui::VfoAB) { ui->setupUi(this);
spinbox.push_back(ui->spinBox_0); spinbox.push_back(ui->spinBox_1); spinbox.push_back(ui->spinBox_2); spinbox.push_back(ui->spinBox_3); spinbox.push_back(ui->spinBox_4); spinbox.push_back(ui->spinBox_5); spinbox.push_back(ui->spinBox_6); spinbox.push_back(ui->spinBox_7); spinbox.push_back(ui->spinBox_8); spinbox.push_back(ui->spinBox_9);
//if (!hasFocus()) // setFocus(); /* if(ui->spinBox_0->hasFocus()) spin = 0; else if(ui->spinBox_1->hasFocus()) spin = 1; else if(ui->spinBox_2->hasFocus()) spin = 2; else if(ui->spinBox_3->hasFocus()) spin = 3; else if(ui->spinBox_4->hasFocus()) spin = 4; else if(ui->spinBox_5->hasFocus()) spin = 5; else if(ui->spinBox_6->hasFocus()) spin = 6; else if(ui->spinBox_7->hasFocus()) spin = 7; else if(ui->spinBox_8->hasFocus()) spin = 8; else if(ui->spinBox_9->hasFocus()) spin = 9;*/
QList<QSpinBox*> spinbox = this->findChildren<QSpinBox*>(); QListIterator<QSpinBox*> it(spinbox); // перебирать список виджетов QSpinBox *spinBoxField; while (it.hasNext()) { spinBoxField = it.next(); // взять каждый виджет в списке if(QSpinBox *spinBox = qobject_cast<QSpinBox*>(spinBoxField)) { // проверить, имеет ли итерируемый виджет тип QSpinBox if (spinBox->hasFocus()) { connect(spinbox[spin], SIGNAL(valueChanged(int)), SLOT(frontchangespinBox())); } } }
//spin = 1; //connect(spinbox[spin], SIGNAL(valueChanged(int)), SLOT(frontchangespinBox()));
ui->label->setText(QString().setNum(numspin)); ui->label_5->setText(QString("%1").arg(spin)); }
VfoAB::~VfoAB() { delete ui; }
void VfoAB::frontchangespinBox() {
upvalspin = spinbox [spin] ->value(); if (upvalspin == 0) if (upprevspin == 9) spinbox [spin +1] ->stepUp(); upprevspin = upvalspin;
downvalspin = spinbox [spin] ->value(); if (downvalspin == 9) if (downprevspin == 0) spinbox [spin +1] ->stepDown(); downprevspin = downvalspin; } ]
Название: Re: C++ (Qt) не вижу фокус spinBox
Отправлено: PimenS от Февраль 22, 2022, 16:41
Доброго дня.
Как вариант, в слоте получать sender(). Это и будет указатель на spinBox.
Название: Re: C++ (Qt) не вижу фокус spinBox
Отправлено: eu7bz от Февраль 22, 2022, 17:04
Спасибо! Знания скудны по этому нужно сначала почитать документацию, осознать, потом пробовать.
|