Russian Qt Forum

Qt => Вопросы новичков => Тема начата: eu7bz от Февраль 22, 2022, 13:02



Название: 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
Спасибо! Знания скудны по этому нужно сначала почитать документацию, осознать, потом пробовать.