Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 97

Сохранение / загрузка виджета

30.08.2025, 22:38. Показов 2457. Ответов 35

Студворк — интернет-сервис помощи студентам
вот так загружаю сейв виджета:
C++ (Qt)
1
2
3
4
5
6
7
8
9
QSettings settings;//сейв виджета
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    restoreState(settings.value("MainWindow/state").toByteArray());//загружаем сейв
    QObject::connect(ui->ButtonOK ,SIGNAL(clicked(bool)),this,SLOT(on_pushButton_clicked()));
}
вот так сохраняю:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
void MainWindow::on_pushButton_clicked()
{
    QString emitent = ui->ticker->text();//берем введенный тикер и ищем
    for (unsigned int i = 0; i < 259; ++i)//259-размер массива
    {
        if (SECID[i] == emitent)//если нашли
        {
            QLabel *labelSECNAME = new QLabel(); // Создаем новую метку
            ui->layoutSECNAME->addWidget(labelSECNAME); // Добавляем метку на свой слой
            labelSECNAME->setText(SECNAME[i]); //устанавливаем текст из массива
            settings.setValue("MainWindow/state",saveState());//сохраняем виджет
            return;
//программно создается label

вот так дано в мануале:
C++ (Qt)
1
2
3
4
5
6
void MainWindow::readSettings()
{
    QSettings settings("MyCompany", "MyApp");
    restoreGeometry(settings.value("myWidget/geometry").toByteArray());
    restoreState(settings.value("myWidget/windowState").toByteArray());
}
C++ (Qt)
1
2
3
4
5
6
7
void MyMainWindow::closeEvent(QCloseEvent *event)
{
    QSettings settings("MyCompany", "MyApp");
    settings.setValue("geometry", saveGeometry());
    settings.setValue("windowState", saveState());
    QMainWindow::closeEvent(event);
}
я вроде как упростил. если кто хочет почитать то эти методы не в QSettings как вроде по логике, а в QMainWidnow.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.08.2025, 22:38
Ответы с готовыми решениями:

Как навести мышку на x,y внутри виджета относительно 0,0 виджета (левого верхнего угла виджета)?
Как навести мышку на x,y внутри виджета относительно 0,0 этого виджета (левого верхнего угла...

Вызов одного виджета из другого виджета
добрый день, есть 2 формы, сделанные в дизайнере. По нажатию на кнопку из формы 1 хочу чтобы...

Как добраться до виджета, который находится внутри другого виджета?
Есть QStackWidget, внутри которого на одной из страниц-виджетов находится QTabWidget....

35
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
31.08.2025, 14:15
Цитата Сообщение от MVDmitrii Посмотреть сообщение
settings.setValue("MainWindow/state",saveState());//сохраняем виджет
Сохраняешь состояние самого окна - в документации есть ремарка о том, что это значит.
(И сохраняешь каждый раз при добавлении нового лейбла в цикле, хотя можно сделать это один раз после всех модификаций окна).

Цитата Сообщение от MVDmitrii Посмотреть сообщение
Сохранение / загрузка виджета
Я бы понимал эту фразу, как сохранение и загрузку его свойств, например text для QLineEdit или value для QSlider и тд. По-моему, сабж уже когда-то был в этом разделе.( у себя нашел реализацию - но выкладывать лень в очередной мертвой теме)
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 97
31.08.2025, 14:26  [ТС]
Да сохранять хочу после каждого изменения. Вы можете хотя бы теорию объяснить. Мне нужно сохранять каждый label отдельно? Текст label тоже отдельно? Если да тогда как мне узнать название их потому как они создаются программно с именами по умолчанию я так полагаю
0
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
31.08.2025, 15:10
Делал когда-то, сейчас может сделал бы немного по-другому. Боюсь, тебе сложновато будет разобраться.

Смысл тут такой:
Кликните здесь для просмотра всего текста

- есть хранилище свойств QMap<QString, QList<widgetProperty>> contentData; где ключь - это objectName() виджета (который должен быть обязательно задан виджетам, данные которых надо сохранить), а значение -это структура с именем и значением свойства (хотя можно было бы только имя хранить и получать значение через property())

- свойства записываются в хранилище по сигналам от виджета (а не проходом по всем виджетам в нужный момент например-так как виджет может уже перестать существовать. Снова же, QMetaProperty/Object/Type предоставляет кучу данных, включая сигнал, изменяющий свойство-так что есть простор для творчества)

- при закрытии приложения срабатывает void closeEvent() и void saveSettings(); в нем, где данные из хранилища пишутся в человекочитаемый файл с помощью QSettings (а можно просто в бинарник запихать)

-при запуске приложения вызывается readSettings(); где итерирумся по файлу QSetings, получая objectName виджета, имя и значение свойства. Если найден виджет с таким именем, через QMetaObject настраиваем свойство (тут я не делал проверок на isReadable, isWritable свойств- хотя стоило бы)


листинг
Кликните здесь для просмотра всего текста

mainwindow.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
class QLineEdit;
class QSlider;
class QSettings;
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
    struct widgetProperty{
        QVariant value;
        QString name;
    };
 
private:
    QMap<QString, QList<widgetProperty>> contentData;
 
private:
    QLineEdit *inputName;
    QSlider *slider;
    QSettings *settings;
 
private:
    void readSettings();
    void saveSettings();
 
protected:
    void closeEvent(QCloseEvent *event)override;
};
#endif // MAINWINDOW_H
mainwindow.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "mainwindow.h"
#include <QVBoxLayout>
#include <QSettings>
#include <QLineEdit>
#include <QSlider>
#include <QMetaObject>
#include <QMetaProperty>
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    settings= new QSettings("path to settings file", QSettings::IniFormat, this);
 
    auto form=new QWidget;
    auto layout=new QVBoxLayout;
    form->setLayout(layout);
    setCentralWidget(form);
    
    inputName=new QLineEdit;
    inputName->setObjectName("inputName");
    layout->addWidget(inputName);
 
    connect(inputName, &QLineEdit::editingFinished, this, [this]{
        contentData.insert(inputName->objectName(), {
                                                        {inputName->text(), "text"},
                                                        {inputName->saveGeometry(), "saveGeometry"}
                                                    }
                           );
    });
 
    slider=new QSlider;
    slider->setObjectName("slider");
    layout->addWidget(slider);
 
    connect(slider, &QSlider::valueChanged, this, [this](int value){
        contentData.insert(slider->objectName(), {
                                                     {value, "value"}
                                                 }
                           );
    });
 
    readSettings();
}
 
 
void MainWindow::closeEvent(QCloseEvent *event)
{
    saveSettings();
    QMainWindow::closeEvent(event);
}
 
 
void MainWindow::saveSettings()
{
    for(const auto&[objectName, properties] : contentData.asKeyValueRange()){
        for(const auto&[value, name] : properties){
            settings->setValue(objectName + "/" + name, value);
        }
    }
}
 
 
void MainWindow::readSettings()
{
    for(const auto &objectName : settings->childGroups()){
        auto widget=findChild<QWidget*>(objectName);
        if(!widget)
            return;
        settings->beginGroup(objectName);
        for(const auto &propertyName : settings->allKeys()){
            widget->metaObject()->property(
                                    widget->metaObject()->indexOfProperty(propertyName.toLatin1())
                                    ). write(widget, settings->value(propertyName)
                       );
        }
        settings->endGroup();
    }
}
 
 
MainWindow::~MainWindow() {}
0
Заблокирован
31.08.2025, 15:25
Я вопроса не увидел в шапке, поэтому просто прошел мимо.
О чем вы?
Можно увидеть четкую постановку задачи?
0
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
31.08.2025, 15:39
Цитата Сообщение от SmallEvil Посмотреть сообщение
Можно увидеть четкую постановку задачи?
SmallEvil, сохранить состояние контента окна(например значения в полях ввода, тригеры на кнопках, положение слайдеров и тд) в момент его закрытия, и восстановить при след. запуске.

зы увидел ошибку в 68 строчке, continue вместо reeturn. Может и еще есть, давно мутил.
0
Заблокирован
31.08.2025, 16:04
Цитата Сообщение от sdf45 Посмотреть сообщение
сохранить состояние контента окна(например значения в полях ввода, тригеры на кнопках, положение слайдеров и тд) в момент его закрытия, и восстановить при след. запуске.
Ну так даже примеров хватит.

Собрать коллекцию указателей виджетов на форме.
Сохранить состояния.

Загрузка так же.
Собираем коллекцию указателей виджетов на форме.
Если есть виджет с таким именем, загружаем.

Я бы даже сделал рекурсивно.

Но я думаю всё же лучше узнать от ТС. А то что то не похоже.

Добавлено через 3 минуты
p.s. Это даже хорошо, что заранее создали таку себе сериализацию, радует)
0
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
31.08.2025, 17:02
Цитата Сообщение от SmallEvil Посмотреть сообщение
Но я думаю всё же лучше узнать от ТС. А то что то не похоже.
Собсна да, это я про свой код сказанул, -как раз разбирался, что я там понаписывал
Ну пусть ТС уточняет, в любом случае можно переделать под свои понятия.

Добавлено через 53 минуты
Цитата Сообщение от sdf45 Посмотреть сообщение
Боюсь, тебе сложновато будет разобраться.
MVDmitrii, можешь просто загонять значения свойств своих виджетов в файл, на первых порах, чтобы разобраться
settings->setValue("TextOfMyLabel", myLabel->text());
и читать
QString txt=settings->value("TextOfMyLabel").toString();
myLabel->setText(txt);

и
Кликните здесь для просмотра всего текста

Вот это
C++ (Qt)
1
2
3
4
5
6
    connect(slider, &QSlider::valueChanged, this, [this](int value){
        contentData.insert(slider->objectName(), {
                                                     {value, "value"}
                                                 }
                           );
    });
если не понятно, можно расписать (в контексте моего примера) как
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    connect(slider, &QSlider::valueChanged, this, [this](int value){
         //нужно заполнить словарь QMap<QString, QList<widgetProperty>> contentData;
         //в нем ключь -имя виджета, а значение - список его свойств
         //потом этот словарь можно сохранить (в файл текст/бинарник, JSON, XML или в БД например)
 
         widgetProperty p; //созд. обьект структуры, описывающее свойство
         p.value=value; //заполняем его поля
         p.name="value";
         QList<widgetProperty> list; //создаем список таких структур (свойств) 
         //свойств может быть несколько-потому список
         list.append(p); //добавляем созданную структуру в список
         QString oName=slider->objectName(); //получаем имя виджета
         contentData.insert(oName, list); //добавляем запись в словарь
 
    });
так же вместо лямбды можно использовать отдельный метод класса или функцию

0
фрилансер
 Аватар для Алексей1153
6437 / 5632 / 1126
Регистрация: 11.10.2019
Сообщений: 14,971
31.08.2025, 17:12
Цитата Сообщение от MVDmitrii Посмотреть сообщение
i < 259
C++
1
i<std::size(SECID)
1
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 97
01.09.2025, 21:22  [ТС]
сложность вот в чем.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void MainWindow::on_pushButton_clicked()
{
    QString emitent = ui->ticker->text();//берем введенный тикер и ищем
    for (unsigned int i = 0; i<std::size(SECID); ++i)
    {
        if (SECID[i] == emitent)//если нашли
        {
            QLabel *labelSECNAME = new QLabel(); // Создаем новую метку
            ui->layoutSECNAME->addWidget(labelSECNAME); // Добавляем метку на свой слой
            labelSECNAME->setText(SECNAME[i]);  // Устанавливаем текст из массива
 
 
            QSpinBox *spinbox = new QSpinBox();//Создаем spinbox
            ui->layoutquantity->addWidget(spinbox);//добавляем spinbox на свой слой
            quantity = spinbox->value();//записываем в переменную количество
 
            QString a = "https://iss.moex.com/iss//";
            QString b = SECID[i];
            QString c = ".xml?s.columns=PREVPRICE";
            QUrl url = a+b+c;
 
            HttpFetcher *fetcher = new HttpFetcher;//Создаем новый запрос
            fetcher->setURL(url);//Принимаем новый адрес
 
            QLabel *labelPREVPRICE = new QLabel(); // Создаем новую метку цены
            ui->layoutPREVPRICE->addWidget(labelPREVPRICE); // Добавляем метку на свой слой
            labelPREVPRICE->setText(PREVPRICE);  // Устанавливаем значение цены 
            ui->ticker->clear();//очищаем окно ввода
            settings.setValue("MainWindow/state",saveState());//сохраняем виджет
            return;
        }
        else {
            QMessageBox::information(this,"","Такой тиккер не найден");
        }
    }
    ui->ticker->clear();//очищаем окно ввода
}
создается в одну строку label spinbox и еще один label. создаются они с именами по умолчанию. ЧТО мне заносить в :
C++ (Qt)
1
settings.setValue("MainWindow/state",saveState());
ну значения их я знаю а ИМЕНА КАКИЕ?

Добавлено через 2 минуты
извинюсь что долго не отвечаю на работе дурдом какой то начался

Добавлено через 9 минут
так, нужно создавать label с именем из массива
C++ (Qt)
1
2
3
QLabel *labelSECNAME[i] = new QLabel();
ui->layoutSECNAME->addWidget(labelSECNAME[i]);
labelSECNAME->setText(SECNAME[i]);//будет называться как SECNAME[i] и принимать это же значение
Добавлено через 2 минуты
может так?:
C++ (Qt)
1
2
QString name = SECNAME[i];
ui->layoutSECNAME->addWidget(name)
0
Заблокирован
01.09.2025, 22:39
Цитата Сообщение от MVDmitrii Посмотреть сообщение
settings.setValue("MainWindow/state",saveState());//сохраняем виджет
Какой виджет?
Вы хоть смотрели что вы сохраняете?

Цитата Сообщение от MVDmitrii Посмотреть сообщение
ну значения их я знаю а ИМЕНА КАКИЕ?
widget.objectName()
0
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
01.09.2025, 22:46
Лучший ответ Сообщение было отмечено MVDmitrii как решение

Решение

MVDmitrii, сохранить в файл можно данные (из виджета), а сам виджет-нельзя.
Так и не обьяснил, зачем эти сохранения.

Смотри документацию по QSettings. Например, там можно группировать данные:
Кликните здесь для просмотра всего текста

QSettings s;
так:
s.setValue("имя группы/имя поля", value);
или так:
s.beginGroup("имя группы");
s.setValue("имя поля", value);
s.endGroup();

и получится запись в файле:
[имя группы]
имя поля = value

Это можно использовать для сохранения текста на лейбле, например:
s.setValue("labelSECNAME/text", labelSECNAME->text());

Если планируется устанавливать данные в виджеты из файла при запуске проги, то надо:
-либо знать, в какой именно виджет устанавливать значение. Это возможно, если дать виджету внутреннее имя setObjectName(), как сделано в моем примере.
-либо сначала читать данные с файла в какое-то хранилище, а виджеты должны сами выбирать
себе значения оттуда после своего создания.


по листингу:
Кликните здесь для просмотра всего текста

можно сразу так:
ui->layoutSECNAME->addWidget( new QLabel( SECNAME[i] ) );

спинбокс пустой при создании, для сохранения его значений используй соответствующий сигнал:
quantity = spinbox->value();//записываем в переменную количество
замени на:
connect(spinbox, &QSpinBox::valueChanged, this, [this](int value){quantity = value;});

Возможная утечка памяти, если fetcher не имеет владельца:
HttpFetcher *fetcher = new HttpFetcher;

елсе не нужен тут, иначе месседж выведется много раз (по размеру массива):
else {
QMessageBox::information(this,"","Такой тиккер не найден");
}

Если SECID[i] - это сырой массив строк, то лучше пользоваться QStringList и его методом at() или циклом
Тогда "так, нужно создавать label с именем из массива" может выглядеть так:

QStringList names{"label1", "label2", "label3"};
...
for(const auto &name : names){
ui->layoutSECNAME->addWidget( new QLabel( name ) );
}
1
Заблокирован
01.09.2025, 22:57
Я бы ещё добавил, что QSettings под Окнами, по умолчанию пишет в РЕЕСТР!!!
Поэтому я тестировал и знакомился с ним, только что, вот так:
C++ (Qt)
1
    QSettings settings(QString("state.ini"), QSettings::IniFormat); // пишем в файл, после удаления объекта settings или  его вызова sync()
Добавлено через 1 минуту
p.s. Кстати да, рано я обрадовался что готовая сериализация виджетов есть...
0
01.09.2025, 23:06

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
рано я обрадовался что готовая сериализация виджетов есть...
мне когда-то понадобилась ,не помню зачем, но я не смог-знаний не хватило... видел вроде бы целую либу на гите на эту тему, немалого обьема. вобщем, забил на это все

0
Заблокирован
02.09.2025, 00:09
Цитата Сообщение от SmallEvil Посмотреть сообщение
сериализация виджетов
sdf45, ну можно "накостылить" для некоторого количества стандартных виджетов.
Думаю для ТС должно быть достаточно.
Или просто сохранить все данные ручками, как в старые добрые. Меньше нужно знаний и времени.

Хотя стоп. О чем это мы.
Данные отдельно, виджеты отдельно. И проблема решена.
1
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
02.09.2025, 00:59
SmallEvil, я так понимаю ход событий:
ТС увидел в примерах QSettings сохранение состояния saveState() для QMainWindow и сделал два неверных вывода, что:
а) Сохраняется состояние всего контента окна, включая например, текст в лайнэдитах и тд.
Я спецом уточнил:
Цитата Сообщение от sdf45 Посмотреть сообщение
Сохраняешь состояние самого окна - в документации есть ремарка о том, что это значит.
Вот ремарка:
Saves the current state of this mainwindow's toolbars and dockwidgets. This includes the corner settings which can be set with setCorner(). The version number is stored as part of the data.
б)Такой метод есть у всех виджетов

Поэтому как вы пишите:
Цитата Сообщение от SmallEvil Посмотреть сообщение
просто сохранить все данные ручками, как в старые добрые.
Цитата Сообщение от SmallEvil Посмотреть сообщение
И проблема решена.
Именно в этом ключе все мои ответы по сабжу.

Вспомнилось (ближе к концу темы смотрите ):
Перемещение объекта класса из файла .txt в переменную
1
Заблокирован
02.09.2025, 02:17
Цитата Сообщение от sdf45 Посмотреть сообщение
Вспомнилось (ближе к концу темы):
Перемещение объекта класса из файла .txt в переменную
Ну там вообще зашквар) А уже шел 2022 год...

Ну вот, пару виджетов на форме, сохранил/загрузил, без проверок, минимум:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    loadDataFromFile();
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::saveDataToFile() const
{
    QSettings settings(QString("state.ini"), QSettings::IniFormat);
    settings.beginGroup(this->objectName());
    settings.setValue("state", saveState());
    settings.setValue("geometry", saveGeometry());
    const auto ui = this->ui;
    settings.setValue(ui->label->objectName().append('.').append("text"), ui->label->text());
    settings.setValue(ui->label_2->objectName().append('.').append("text"), ui->label_2->text());
    settings.setValue(ui->lineEdit->objectName().append('.').append("text"), ui->lineEdit->text());
    settings.setValue(ui->pushButton->objectName().append('.').append("text"), ui->pushButton->text());
    settings.endGroup();
}
 
void MainWindow::loadDataFromFile()
{
    QSettings settings(QString("state.ini"), QSettings::IniFormat);
    settings.beginGroup(this->objectName());
    restoreGeometry(settings.value("geometry").toByteArray());
    restoreState(settings.value("state").toByteArray());
 
    const auto ui = this->ui;
    ui->label->setText(settings.value(ui->label->objectName().append('.').append("text")).toString());
    ui->label_2->setText(settings.value(ui->label_2->objectName().append('.').append("text")).toString());
    ui->lineEdit->setText(settings.value(ui->lineEdit->objectName().append('.').append("text")).toString());
    ui->pushButton->setText(settings.value(ui->pushButton->objectName().append('.').append("text")).toString());
    settings.endGroup();
}
 
 
 
void MainWindow::closeEvent(QCloseEvent *event)
{
    saveDataToFile();
    QMainWindow::closeEvent(event);
}
Вот такой INI получился:
Code
1
2
3
4
5
6
7
[MainWindow]
state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x1\x90\0\0\x1\x38\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\0)
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x1\xe3\0\0\0\xb1\0\0\x3r\0\0\x2\a\0\0\x1\xe3\0\0\0\xd0\0\0\x3r\0\0\x2\a\0\0\0\0\0\0\0\0\x5V\0\0\x1\xe3\0\0\0\xd0\0\0\x3r\0\0\x2\a)
label.text=TextLabel1
label_2.text=TextLabel2
lineEdit.text=adfasdfsadfasdfasdfsa
pushButton.text=PushButton
0
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
02.09.2025, 13:42
Думаю, наших примеров достаточно, что бы ТС пришел к какому-то пониманию решения своей задачи, которую я не особо понимаю.
Цитата Сообщение от MVDmitrii Посмотреть сообщение
Да сохранять хочу после каждого изменения. ...
А зачем - хз. Если для восстановления состояния закрытого ранее окна- так лучше будет работать с бинарным файлом, если формировать некий отчет - то куча вариантов от QSettings до БД или Exel документа.

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
Ну там вообще зашквар)
Угу :)

0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 97
02.09.2025, 14:36  [ТС]
на рабочем компе почему то не могу ни цитировать ни текс делать кодом, заранее извиняюсь.
начну с начала и в поподробнее. есть lineEdite строка в которую вводим текст.
ввели текст нажали кнопку принять и:
void MainWindow::on_pushButton_clicked()
{
QString emitent = ui->ticker->text();//берем введенный тикер и ищем
for (unsigned int i = 0; i<std::size(SECID); ++i)//в массиве лежат уже слова и когда находим совпадение:
{
if (SECID[i] == emitent)//если нашли
{
QLabel *labelSECNAME = new QLabel(SECID[i]); // Создаем новую метку и называем его по SECID
ui->layoutSECNAME->addWidget(labelSECNAME); // Добавляем метку на свой слой
labelSECNAME->setText(SECNAME[i]); // Устанавливаем текст из массива
settings.setValue("labelSECNAME/text",labelSECNAME->text());

и дальше, вот создался у нас например labelSECNAME с именем SECID[i]
settings.setValue("labelSECNAME/text",labelSECNAME->text());//сохраняем текущий label

затем чтобы нам загрузить его что загружать? я не знаю какой SECID вводил пользователь и под каким именем создался label, а их может быть 259 штук.
0
1131 / 727 / 194
Регистрация: 30.03.2021
Сообщений: 2,378
02.09.2025, 14:58
Цитата Сообщение от MVDmitrii Посмотреть сообщение
затем чтобы нам загрузить его что загружать? я не знаю какой SECID вводил пользователь и под каким именем создался label, а их может быть 259 штук.
Что имеется ввиду под "загружать"? Куда загружать? В какой ситуации?

Добавлено через 12 минут
Вот по листингу 10 и 19 поста я понимаю так:
- есть поле ввода, где вводится название (товара?)
- при нажатии кнопки , если имя товара есть в массиве SECID
- формируется строчка из лейбла с названием товара и спинбокса с ценой, и вставляется в некий лейаут главного окна.

Ну все, на окне появилась эта строчка, и?...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.09.2025, 14:58
Помогаю со студенческими работами здесь

Сохранение свойств виджета
Здравствуйте, Делаю программу для визуализаций (графики, карты и т.д.) данных. Данные хранятся...

Сохранение состояния и положения виджета
Всем добрый день. Нужно сохранить при закрытии приложения настройки всех виджетов - вкладки,...

Размещение своего виджета на форме
Добрый вечер, Пишу интерфейс для своей программы без использования средств Qt Designer и вот...

Установка фона виджета
Доброго времени суток, господа! Подскажите новичку, как правильно установить фон виджета из файла...

Qt. Управление сеансом и нестандартный вид окна виджета.
Доброго времени суток! Возникла пара вопросов. Вопрос 1 Мне необходимо, чтобы приложение,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru