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;" натолкнул на правильную мысль :)

                                                                            Пікірлер

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

                                                                            C++ - Тест 001. Первая программа и типы данных

                                                                            • Нәтиже:66ұпай,
                                                                            • Бағалау ұпайлары-1
                                                                            t

                                                                            C++ - Тест 001. Первая программа и типы данных

                                                                            • Нәтиже:33ұпай,
                                                                            • Бағалау ұпайлары-10
                                                                            t

                                                                            Qt - Тест 001. Сигналы и слоты

                                                                            • Нәтиже:52ұпай,
                                                                            • Бағалау ұпайлары-4
                                                                            Соңғы пікірлер
                                                                            G
                                                                            GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
                                                                            Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                                                                            d
                                                                            dblas5Шілде 5, 2024, 11:02 Т.Ж.
                                                                            QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                                                            k
                                                                            kmssrАқп. 8, 2024, 6:43 Т.Қ.
                                                                            Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                                                            АК
                                                                            Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
                                                                            Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                                                            Енді форумда талқылаңыз
                                                                            Evgenii Legotckoi
                                                                            Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                                                                            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                                                            F
                                                                            FynjyШілде 22, 2024, 4:15 Т.Ж.
                                                                            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                                                                            BlinCT
                                                                            BlinCTМаусым 25, 2024, 1 Т.Ж.
                                                                            Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                                                                            BlinCT
                                                                            BlinCTМамыр 5, 2024, 5:46 Т.Ж.
                                                                            Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                                                                            Evgenii Legotckoi
                                                                            Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
                                                                            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

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