По ТЗ сделать так, чтобы при нажатой соответствующей CheckBox показывался

нужная кривая на графике. Моя мысль по реализации была такой: дать каждой галочке своё имя, соответствующее обычному порядковому номеру, отрисовать все графики, скрыть ненужные, а затем, по необходимости показывать соответствующую кривую.

Объекты, о которых говорится выше, создаются динамически. Графики реализованы на QCustomPlot.

Показываю пример:
gridLGraphics = new QGridLayout(ui->gB_graphic_N);
for (unsigned int j = 1; j <= train_data->num_input; j++) {
QCheckBox *checkBox = new QCheckBox;
checkBox->setText("Вход " + QString::number(j));
checkBox->setObjectName(QString::number(j));
connect(checkBox, &QCheckBox::clicked, this, &MainWindow::slotChecked);
gridLGraphics->addWidget(checkBox);
}

for (unsigned int j = 1; j <= train_data->num_input; j++) {
QCustomPlot *customPlot = new QCustomPlot;
QWidget* widget = static_cast<QCustomPlot *> (customPlot);

customPlot->xAxis->setRange(0,train_data->num_data);
customPlot->yAxis->setRange(-1,1);
for(unsigned int i = 0; i < train_data->num_input; i++)
{
customPlot->addGraph();
x.clear();
y.clear();
for (unsigned int k = 0; k < train_data->num_data; k++) {
x.push_back(k);
y.push_back(train_data->input[k][i]);
}
customPlot->graph(i)->addData(x,y);
customPlot->graph(i)->setPen(QColor(rand()%255,rand()%255,rand()%255));
customPlot->replot();

}
ui->tW_grapfics->insertTab(j,widget,"График " + QString::number(j));

}

В общем, вопрос такой: нажатие определенного checkBox'а провожу с помощью обычного слота, подключенного к каждому объекту с помощью сигнала:
QCheckBox *box = (QCheckBox*) sender();
Нажатие отрабатывается нормально, определение кнопки работает верно.
Затем я хочу вытащить из двух (их может быть больше) вкладок QCustomPlot и провести там манипуляции с графиками. Делал это тремя способами:
1. QCustomPlot * plot = static_cast<QCustomPlot*>(ui->tW_grapfics->currentWidget());
plot->graph(box->objectName().toInt())->setVisible(false);
2. QList<QCustomPlot*> plots = ui->tW_grapfics->findChildren<QCustomPlot*>();
plots[0]->graph(2)->setVisible(false);
3. QCustomPlot *plot = qobject_cast<QCustomPlot *> (ui->tW_grapfics->currentWidget());

Один из вариантов (вроде 3ий) отрабатывает, но почему-то не на нулевом (График 1) окошке, а на первом (График 2), хотя нахожусь я на нулевом.

Может я что-то не правильно делаю, что-то неправильно создаю/подсовываю? Буду благодарен любой подсказке и наведению на мысль

3 ответов

27 просмотров

не уверен что правильно понял, но кажется, как то ты и мудро слишком и слишком сложно делаешь.. определил кол-во входов -> создаешь для каждого входа checkBox в одном месте и tab в другом, верно? ну так на этапе создания свяжи каждую пару через QHash (QMap) Так оно надежнее, нагляднее и очевиднее. Поскольку в контейнере ты будешь хранить ссылки на объекты, и у тебя их не сотни тысяч, по ресурсам это будет копейки стоить

Александр Серый
Спасибо! Попробую!

видимо, тут тебе как-то так сделать QCheckBox *box = (QCheckBox*) sender(); if (!box || !m_boxPlotHash.contains(box)) return; QCustomPlot *plot=m_boxPlotHash.value(box); do_some_thing_with_plot Если надо все спрятать, а этот показать, то как-то: QCheckBox *currentBox = (QCheckBox*) sender(); foreach (QCheckBox *box, m_boxPlotHash.keys()) { if (!m_boxPlotHash.contains(box)) continue; QCustomPlot *plot=m_boxPlotHash.value(box); if (!plot) continue; plot->setVisible(box == currentBox); }

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
кто-нибудь уже пробовал это?
Lencore
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
❓ Подскажите как сделать в группе телеги функцию (кнопку) пересылки сообщения где есть нарушение правил? Бот к каждому сообщению (по определенным ключам) добавляет снизу кнопк...
Alexander
4
Карта сайта