Arrow
ArrowҚаң. 30, 2017, 2:22 Т.Қ.

Работа с динамическими компонентами

QPushButton

Помогите разобраться в чем проблема.

Идея такая:

Есть layout под именем btnLayout в который динамически добавляются кнопки при выполнении пользователем определенных действий.

При клике пользователем на кнопку должно отработаться определенное действие закрепленное за кнопкой и все последующие кнопки (созданные после данной кнопки) необходимо удалить. (текущая остается и созданные до нее)

В дизайнере создан btnLayout (горизонтальный) в который динамически добавляются кнопки (изначально он пустой). Этот btnLayout вместе с кнопкой (someButton) и спейсером между ними помещен в горизонтальный layout.

В низу фрагмент моего кода для реализации этого:


// В хедере
void addButton();

QPushButton *btn[20];

qint64 btnCount = 0;

// Реализация
void MainWindow::addButton()
{
    btnCount++;

    btn[btnCount] = new QPushButton(this);

    // Стиль кнопки
    btn[btnCount]->setStyleSheet(StyleHelper::getButtonStyleSheet());

    // Настройка свойств кнопки
    btn[btnCount]->setCheckable(true);
    btn[btnCount]->setChecked(true);
    btn[btnCount]->setText("Текст");

    ui->btnLayout->addWidget(btn[btnCount]);

    
    QString s = "...";
    qint64 num = btnCount;
    connect(btn[btnCount], &QPushButton::clicked, [this, s, num] {
        nTString(s);

        // Удалить все последующие кнопки
        for(int i = num+1; i <= btnCount; i++)
        {
            disconnect(btn[i]);
            delete btn[i];

            // Уменьшить счетчик
            btnCount--;
        }
    });

    // Снять выделение с предыдущей кнопки
    if(btnCount > 0) btn[btnCount-1]->setChecked(false);
}

Компиляция проходит успешно и работает.

Самое интересное начинается если для кнопки someButton добавить обработчик onClick. Тогда при запуске программа аварийно завершает работу.

При отладке выяснил, что вылет происходит на строке:

if(btnCount > 0) btn[btnCount-1]->setChecked(false);

При отладке появляется окно с текстом о том, что программа завершила свою работу получив соответствующее сообщение от ОС.

Если строку закоментировать, то все работает, только выделение с кнопок не снимается и все работает. Также работает если удалить обработчик onClick.

Но если количество динамически созданных кнопок более 5-ти, то удаляются все кнопки после текущей за исключением самой последней (ее тоже нужно удалять).

Не могу понять чем обработчик события onClick и строка

if(btnCount > 0) btn[btnCount-1]->setChecked(false);
не понравились друг другу :).
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

37
Evgenii Legotckoi
  • Қаң. 30, 2017, 11:52 Т.Қ.

Здесь снимается выделение всё-таки не с предыдущей кнопки, а с текущей. Если количество кнопок btnCount = 20, то номер текущей кнопки будет равен 19. Счёт у программистов начинается с 0. ;-)

if(btnCount > 0) btn[btnCount-1]->setChecked(false);

Что это за nTString ? - это какой-то метод класса?

Насколько помню объекты объявленные в стеке лучше захватывать лямбдой через ссылку:

connect(btn[btnCount], &QPushButton::clicked, [this,  &s, &num] {

    });

Учитывая, что QPushButton - это объект, который наследован от QObject, то попробуйте удалять его соответствующим методом, а не через оператор delete . Это снимает некоторые проблемы, если объект где-то ещё используется.

btn[i]->deleteLater();

Но самой главной проблемой я считаю использование btnCount и num . Скорее всего, в какой-то момент происходит OutOfRange . Для num память выделяется в стеке локально в методе, и когда метод заканчивает работу, то память для num очищается, поэтому лямбда функция захватывает протухшую память. Если бы было выделение памяти в куче через указатель, то тогда всё работало бы правильно, а тут Undefined Behaviour получается.

Совет такой: Избавьтесь от использования btnCount и num . Замените строго заданный массив указателей на QPushButton на QVector. В нём всегда можно узнать количество элементов с помощью метода length() и номер текущего элемента с помощью метода indexOf() . А доводить до ума текущий код не стоит - это решение, которое в будущем создаст больше проблем.

    Arrow
    • Қаң. 31, 2017, 10:09 Т.Ж.

    Спасибо!

    Я как-то о проблемах с памятью не подумал.

    Про счет с нуля знаю :), но пишу btnCount++ - и начинаю счет с 1. :)

    С векторами в Qt никогда не работал - по документации получилось, что-то такое:

    
    // В хедере
    
    void addButton();
    
    QVector vector;
    
    // Реализация
    
    void MainWindow::addButton()
    {
        vector.append(new QPushButton());
        vector.last()->setStyleSheet(StyleHelper::getButtonStyleSheet());
        
    // Настройка свойств кнопки
        vector.last()->setMinimumHeight(35);
        vector.last()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
        vector.last()->setCheckable(true);
        vector.last()->setChecked(true);
        vector.last()->setText(QFileInfo(dir.path()).fileName());
        
    // Добавить в btnLayout
        ui->btnLayout->addWidget(vector.last());
    
        // Сигнал нажатия кнопки
        QString s = dir.path();
        QPushButton *b = vector.last();
        connect(vector.last(), &QPushButton::clicked, [this, s, b] {
            // mainList  - QListView, model - QFileSystemModel
            ui->mainList->setRootIndex(model->index(s));
    
            // Удалить все последующие кнопки
            for(int i = vector.indexOf(b)+1; i < vector.length(); i++)
            {
                disconnect(vector[i);
                vector[i]->deleteLater();
            }
        });
    
        if(vector.length() > 1) vector[vector.indexOf(b)-1]->setCheckable(false);
    }
    

    Если писать так:

    connect(vector.last(), &QPushButton::clicked, [this, &s, &b] 
    

    программа вылетает с аварийным сообщением.

    Все работает корректно, только после клика на кнопке выполнить действие для добавления еще одной - вылетает с надписью: Поток 0 остановлен по причине: Exception at 0x51f01fd4, read access violation.

    Вылет на строке:

    vector[i]->deleteLater();
    

    Если выполнить действие для удаления кнопки, то с тем же сообщением на строке:

    if(vector.length() > 1) vector[vector.indexOf(b)-1]->setCheckable(false);
    

    Так понимаю, что это ошибка доступа к памяти - ссылку на кнопку теряет?

    И вопрос попутно как в отладчике в Qt Creator посмотреть значения переменных, например s из кода выше (кроме qDebug << s;). Я имею ввиду, что-то похожее на то как в отладчике MSVS.

      Arrow
      • Қаң. 31, 2017, 10:11 Т.Ж.
      QVector<QPushButton*> vector;
      
        Evgenii Legotckoi
        • Қаң. 31, 2017, 10:32 Т.Ж.

        Про счет с нуля знаю :), но пишу btnCount++ - и начинаю счет с 1. :)
        Это неочевидный грязный хак. Такие вещи не должны проходить код-ревью, и должны отправляться на переписывание кода. К тому же... А вы не задумывались, что тогда в Вашем массиве QPushButton *btn[20]; на нулевом индексе будет находиться мусор, вместо указателя на первую добавленную кнопку? В р

        Теперь я догадываюсь, где ошибка.

        if(btnCount > 0) btn[btnCount-1]->setChecked(false);
        

        В этом коде скорее всего происходит обращение к элементу с нулевым индексом в массиве. В результате программа вылетает, поскольку там находится мусор.

        Подумайте сами. btnCount равен 1, когда Вы добавили одну кнопку. И тогда Вы пытаетесь снять выделение с предыдущей кнопки, btnCount - 1, и получается 0. обращаетесь к элементу с индексом 0, к мусору. Естественно, что программа вылетала. Вы сами себе накидали граблей.

        В ниже следующем куске кода явно ошибка, это вы так скопипастили из Креатора?

        disconnect(vector[i);
        vector[i]->deleteLater();
        
        Если писать так:
        connect(vector.last(), &QPushButton::clicked, [this, &s, &b] 
        
        программа вылетает с аварийным сообщением.

        Правильно, что ошибку выдаёт, у вас же b - это указатель, объект сохранён в куче. Для него память выделена через new. Его нельзя по ссылке захватить.

        connect(vector.last(), &QPushButton::clicked, [this, &s, b] 
        
        Вылет на строке:
        vector[i]->deleteLater();
        
        Если выполнить действие для удаления кнопки, то с тем же сообщением на строке:
        if(vector.length() > 1) vector[vector.indexOf(b)-1]->setCheckable(false);
        

        Может наоборот?

          Arrow
          • Қаң. 31, 2017, 1:25 Т.Қ.
          Про счет с нуля знаю :), но пишу btnCount++ - и начинаю счет с 1. :) Это неочевидный грязный хак. Такие вещи не должны проходить код-ревью, и должны отправляться на переписывание кода.

          Понятно, больше так писать. не буду.

          В ниже следующем куске кода явно ошибка, это вы так скопипастили из Креатора?
          disconnect(vector[i);
          vector[i]->deleteLater();
          

          Да и к сожалению что не так не знаю.

          Такая конструкция работать отказывается - ошибка:

          connect(vector.last(), &QPushButton::clicked, [this, &s, b] 
          

          Работает так:

          connect(vector.last(), &QPushButton::clicked, [this, s, b] 
          
          Может наоборот?

          Да.

            Evgenii Legotckoi
            • Қаң. 31, 2017, 1:31 Т.Қ.

            Я имел ввиду то, что написано неправильно:

            disconnect(vector[i);
            

            Правильное написание:

            disconnect(vector[i]);
            

            Qt Creator разве не подсвечивал этот кусок?

              Arrow
              • Қаң. 31, 2017, 1:33 Т.Қ.

              Туплю, скобки не заметил, в креаторе все правильно написано.

                Arrow
                • Қаң. 31, 2017, 1:35 Т.Қ.

                И все таки, что может быть не так в коде?

                И как просматривать значения переменных в отладчике в Qt Creator?

                  Evgenii Legotckoi
                  • Қаң. 31, 2017, 1:37 Т.Қ.

                  Так, а что с объявлением QVector? Это просто здесь так написали?

                  QVector vector;
                  

                  Или в коде это выглядит как положено?

                  QVector<QPushButton *> vector;
                  
                    Arrow
                    • Қаң. 31, 2017, 1:39 Т.Қ.

                    В коде второй вариант. В первом случае почему-то скопировал не все.

                      Evgenii Legotckoi
                      • Қаң. 31, 2017, 1:45 Т.Қ.

                      Кажется знаю. Объект удалить-то удалили через deleteLater, но в самом QVector указатель-то остался. Нужно добавить ещё и удаление элемента из QVector

                      disconnect(vector[i);
                      vector[i]->deleteLater();
                      

                      То есть будет так:

                      disconnect(vector[i);
                      vector[i]->deleteLater();
                      vector.remove(i);
                      
                        Arrow
                        • Қаң. 31, 2017, 1:46 Т.Қ.

                        Еще один вопрос немного не по теме - как обновить отображаемые в QListView данные? repain и update - не выолняют нужного действия.

                          Evgenii Legotckoi
                          • Қаң. 31, 2017, 1:51 Т.Қ.

                          repaint и update только перерисовывают сам QListView с содержимым. Чтобы их обновить, необходимо обновить сами данные. Если данные не обновлялись, то выше приведённые методы не окажут видимого эффекта.

                          И что касается значений переменных в отладчике, во время отладки обычно открывается справа панелька с таблицей, где можно посмотреть какие в данный момент переменные активны и их содержимое.

                            Arrow
                            • Қаң. 31, 2017, 1:51 Т.Қ.

                            Да работает, только все равно если кнопок больше двух последнюю кнопку не удаляет.

                            Цикл выглядит так:

                            for(int i = vector.indexOf(b)+1; i < vector.length(); i++)
                                    {
                                        disconnect(vector[i]);
                                        vector[i]->deleteLater();
                                        vector.remove(i);
                                    }
                            
                              Arrow
                              • Қаң. 31, 2017, 1:55 Т.Қ.

                              Спасибо с обновлением данных в QListView понятно куда копать.

                              В отладчике таблицы нет, панель есть, но пустая.

                                Evgenii Legotckoi
                                • Қаң. 31, 2017, 1:58 Т.Қ.

                                Это уже проблема самого цикла. Когда удаляется элемент из вектора, то уменьшается его длина. Поэтому нужно сам цикл реструктурировать.

                                while(vector.last() != b)
                                {
                                    disconnect(vector.last());
                                    vector.last()->deleteLater();
                                    vector.removeLast();
                                }
                                
                                  Evgenii Legotckoi
                                  • Қаң. 31, 2017, 2 Т.Қ.

                                  Переменные в отладчике будут отображаться, когда будете проходить код пошагово. Для этого поставьте точку останова. Нужно кликнуть в редакторе кода слева от номера строки, тогда появится большая красная точка.

                                    Arrow
                                    • Қаң. 31, 2017, 2 Т.Қ.

                                    Спасибо! Работает.

                                      Arrow
                                      • Қаң. 31, 2017, 2:04 Т.Қ.

                                      Спасибо, понял. Плюс нужно было поставить выбрать пункт - показывать локальные переменные.

                                        Arrow
                                        • Қаң. 31, 2017, 2:09 Т.Қ.

                                        Все равно, отладчик не всегда показывает переменные. Приходится постоянно добавлять вычисляемые значения

                                          Evgenii Legotckoi
                                          • Қаң. 31, 2017, 2:11 Т.Қ.

                                          Ну это уже издержки производства.

                                            Arrow
                                            • Қаң. 31, 2017, 2:15 Т.Қ.

                                            Согласен :)

                                              Arrow
                                              • Қаң. 31, 2017, 2:20 Т.Қ.

                                              Еще вопросик. Решил стилизировать меню через QSS и написал такое:

                                              QString StyleHelper::getMenuStyleSheet()
                                              {
                                                  return "QMenu {"
                                                              "background-color: #fff;"
                                                              "border: none;"
                                                              "border-radius: 0px;"
                                                              "margin: 2px;"
                                                              "}"
                                                              "QMenu::item:selected {"
                                                              "color: #111;"
                                                              "background-color: qlineargradient( x1: 0, y1: 0, x2: 0, y2: 1,"
                                                                      "stop: 0 #fff, stop: 1 #eef);"
                                                              "}"
                                                              "QMenu::separator {"
                                                              "height: .5px;"
                                                              "background: #eee;"
                                                              "margin-left: 10px;"
                                                              "margin-right: 5px;"
                                                              "}"
                                                              "QMenu::indicator:non-exclusive:checked {"
                                                              "image: url(:/pict/check.png);"
                                                              "}"
                                                              "QMenu::indicator:non-exclusive:unchecked {"
                                                              "image: url(:/pict/unchecked.png);"
                                                              "}";
                                              }
                                              

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

                                              Как можно убрать этот прямоугольник?

                                                Arrow
                                                • Қаң. 31, 2017, 2:30 Т.Қ.
                                                • Жауап шешім ретінде белгіленді.

                                                Спасибо за помощь!

                                                Если читателям форума понадобится, вот отредактированный рабочий код:

                                                // Хедер *.h
                                                
                                                // Добавить кнопку директории на панель
                                                    void addButton();
                                                
                                                // Кнопки
                                                    QVector<QPushButton*> vector;
                                                
                                                // Реализация *.cpp
                                                
                                                void MainWindow::addButton()
                                                {
                                                    // Добавить кнопку
                                                
                                                    vector.append(new QPushButton());
                                                    vector.last()->setStyleSheet(StyleHelper::getButtonStyleSheet());
                                                
                                                    // Настройка свойств кнопки
                                                    vector.last()->setMinimumHeight(35);
                                                    vector.last()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
                                                    vector.last()->setCheckable(true);
                                                    vector.last()->setChecked(true);
                                                    vector.last()->setText(QFileInfo(dir.path()).fileName());
                                                    // Добавить в Layout
                                                    ui->btnLayout->addWidget(vector.last());
                                                
                                                    // Сигнал нажатия кнопки
                                                    QString s = dir.path();
                                                    QPushButton *b = vector.last();
                                                    connect(vector.last(), &QPushButton::clicked, [this, s, b] {        
                                                        ui->mainList->setRootIndex(model->index(s));
                                                        // Удалить все последующие кнопки
                                                        while(vector.last() != b)
                                                        {
                                                            disconnect(vector.last());
                                                            vector.last()->deleteLater();
                                                            vector.removeLast();
                                                        }
                                                    });
                                                
                                                    if(vector.length() > 1) vector[vector.indexOf(b)-1]->setChecked(false);
                                                }
                                                
                                                  Evgenii Legotckoi
                                                  • Қаң. 31, 2017, 2:37 Т.Қ.

                                                  Что-то не совсем представляю, как выглядит этот оттиск. Можете приложить скриншот в прикрепление к сообщению?

                                                  И ещё. Делайте лучше отдельные темы по отдельным вопросам.

                                                    Arrow
                                                    • Қаң. 31, 2017, 2:55 Т.Қ.

                                                    Буду в другой раз создавать тему.

                                                    Скриншот меню не вышел :), сделал похожий. Круг - это "моя картинка", а рамка - не мое творение.

                                                      Arrow
                                                      • Қаң. 31, 2017, 2:58 Т.Қ.

                                                      Скриншот приложить не выходит - форум выбивает ошибку.

                                                        Arrow
                                                        • Қаң. 31, 2017, 2:59 Т.Қ.

                                                        0

                                                          Arrow
                                                          • Қаң. 31, 2017, 2:59 Т.Қ.

                                                          Получилось :)

                                                            Evgenii Legotckoi
                                                            • Ақп. 1, 2017, 1:12 Т.Ж.

                                                            Не уверен, но возможно стоит применить настройку border для QMenu::indicator:non-exclusive:checked

                                                              Arrow
                                                              • Ақп. 1, 2017, 3:03 Т.Ж.

                                                              Не помогло. Сделал фото как это выглядит на экране.

                                                                Evgenii Legotckoi
                                                                • Ақп. 1, 2017, 8:38 Т.Ж.

                                                                Как вариант, наследовать QMenu и переопределить метод paintEvent и там уже отрисовывать, как хочется. Этот путь конечно посложнее, но гарантирует результат. А насчёт QSS у меня пока мыслей нет.

                                                                  Arrow
                                                                  • Ақп. 1, 2017, 8:50 Т.Ж.

                                                                  Немного помудрил с кодом и выяснил, что если убрать следующие строки, то и проблема исчезает, только вместе с картинками :)

                                                                                  "QMenu::indicator:non-exclusive:checked {"
                                                                                  "image: url(:/pict/check.png);"
                                                                                  "}"
                                                                                  "QMenu::indicator:non-exclusive:unchecked {"
                                                                                  "image: url(:/pict/unchecked.png);"
                                                                                  "}";
                                                                  
                                                                  Наследование это хорошо, но проблема насколько я понимаю в назначении картинки.
                                                                    Arrow
                                                                    • Ақп. 1, 2017, 8:53 Т.Ж.

                                                                    Вообще если в коде затрагивать indicator, например так:

                                                                                    "QMenu::indicator {"
                                                                                    "width: 12px;"
                                                                                    "height: 12px;"
                                                                                    "}"
                                                                    

                                                                    возникает эта проблема.

                                                                      Evgenii Legotckoi
                                                                      • Ақп. 1, 2017, 8:57 Т.Ж.

                                                                      Ну а если применить border к indicator?

                                                                      "QMenu::indicator {"
                                                                      "width: 12px;"
                                                                      "height: 12px;"
                                                                      "border: none;"
                                                                      "}"
                                                                      
                                                                        Arrow
                                                                        • Ақп. 1, 2017, 3:34 Т.Қ.

                                                                        "Не действует."

                                                                          Arrow
                                                                          • Ақп. 1, 2017, 3:41 Т.Қ.

                                                                          Рабочий вариант:

                                                                          QString StyleHelper::getMenuStyleSheet()
                                                                          {
                                                                              return "QMenu {"
                                                                                          "background-color: #fff;"
                                                                                          "border: none;"
                                                                                          "border-radius: 0px;"
                                                                                          "}"
                                                                                          "QMenu::item {"
                                                                                          "padding-left: 18px;"
                                                                                          "margin: 4px;"
                                                                                          "}"
                                                                                          "QMenu::item:selected {"
                                                                                          "color: #111;"
                                                                                          "background-color: qlineargradient( x1: 0, y1: 0, x2: 0, y2: 1,"
                                                                                                  "stop: 0 #fff, stop: 1 #eef);"
                                                                                          "}"
                                                                                          "QMenu::separator {"
                                                                                          "height: .5px;"
                                                                                          "background: #eee;"
                                                                                          "margin-left: 10px;"
                                                                                          "margin-right: 5px;"
                                                                                          "}"
                                                                                          "QMenu::indicator {"
                                                                                          "width: 14px;"
                                                                                          "height: 14px;"
                                                                                          "}"
                                                                                          "QMenu::indicator:non-exclusive:checked {"
                                                                                          "image: url(:/pict/check.png);"
                                                                                          "}"
                                                                                          "QMenu::indicator:non-exclusive:unchecked {"
                                                                                          "image: url(:/pict/unchecked.png);"
                                                                                          "}";
                                                                          }
                                                                          

                                                                          Добавил следующий код:

                                                                                         "QMenu::item {"
                                                                                          "padding-left: 18px;"
                                                                                          "margin: 4px;"
                                                                                          "}"
                                                                          

                                                                          Понял, что у меня нигде не настраивается сам элемент меню в обычном состоянии и из-за этого как оказалось и были проблемы.

                                                                          Спасибо за помощь, Ваш код с "border: none;" натолкнул на правильную мысль :)

                                                                            Пікірлер

                                                                            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                                                            Кіріңіз немесе Тіркеліңіз
                                                                            AD

                                                                            C++ - Тест 004. Указатели, Массивы и Циклы

                                                                            • Нәтиже:50ұпай,
                                                                            • Бағалау ұпайлары-4
                                                                            m
                                                                            • molni99
                                                                            • Қаз. 26, 2024, 1:37 Т.Ж.

                                                                            C++ - Тест 004. Указатели, Массивы и Циклы

                                                                            • Нәтиже:80ұпай,
                                                                            • Бағалау ұпайлары4
                                                                            m
                                                                            • molni99
                                                                            • Қаз. 26, 2024, 1:29 Т.Ж.

                                                                            C++ - Тест 004. Указатели, Массивы и Циклы

                                                                            • Нәтиже:20ұпай,
                                                                            • Бағалау ұпайлары-10
                                                                            Соңғы пікірлер
                                                                            ИМ
                                                                            Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                                                                            Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                                                            Evgenii Legotckoi
                                                                            Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                                                                            Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                                                            A
                                                                            ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                                                                            Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                                                            ИМ
                                                                            Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                                                                            Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                                                            d
                                                                            dblas5Шілде 5, 2024, 11:02 Т.Ж.
                                                                            QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                                                            Енді форумда талқылаңыз
                                                                            m
                                                                            moogoҚар. 22, 2024, 7:17 Т.Ж.
                                                                            Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
                                                                            Evgenii Legotckoi
                                                                            Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                                                                            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                                                            t
                                                                            tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                                                                            google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                                                                            NSProject
                                                                            NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                                                                            Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

                                                                            Бізді әлеуметтік желілерде бақылаңыз