Russian Qt Forum
Ноябрь 22, 2024, 14:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: C++ (Qt) не вижу фокус spinBox  (Прочитано 1394 раз)
eu7bz
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« : Февраль 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;
}
]
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Февраль 22, 2022, 16:41 »

Доброго дня.

Как вариант, в слоте получать sender(). Это и будет указатель на spinBox.
Записан
eu7bz
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« Ответ #2 : Февраль 22, 2022, 17:04 »

Спасибо! Знания скудны по этому нужно сначала почитать документацию, осознать, потом пробовать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.226 секунд. Запросов: 22.