На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Работа с QTCreator без дизайнера
    Ну тут не посмотрел - немного напряг со временем. Чуть позже, если разгребусь. Но сразу советы-аксиомы:

    1) Любой вид контрола/виджета - мы всегда добавляем в лайаут родителя
    2) В лайаут родителя мы можем добавлять не только контролы, но и дочерние лайауты (это если необходимо создать сложную структуру размещений)
    3) Если мы хотим контрол сделать чьи-то родителем, мы должны создать новый лаяут, и установить его в этот контрол. Тогда, добавляя прочие контролы в созданный лайаут, мы фактически добавляем их "в контрол". Это обычно бывает с группирующими контролами.

    Цитата tumanovalex @
    В старой программе на C# я сохранял и загружал файлы в виде сsv файлов

    CSV - очень древнее, и сейчас не самое хорошее решение. Мои варианты следующие:

    1. Формат JSON - идеальное решение. Для жутко сложных конфигураций - то, что доктор прописал. Хорошо поддерживается и автоформатируется в Visual Code/Visual Codium с плагинами
    2. Формат SQLite3 - хорошее решение для относительно простых, но жутко объёмных конфигураций. Там наиболее быстрый поиск, да и запись скорее всего. Есть хорошие менеджеры БД для него. Мне нравится этот. Вообще бомба.

    Оба вышеуказанных формата, и JSON, и SQLite3 - хорошо поддерживаются Qt.
      Цитата Majestio @
      Ну тут не посмотрел
      Да мне не к спеху, еще много чего нужно освоить. Спасибо за ответ. По-моему мнению, у меня конфигурация очень простая и не объемная. Наверное, пока сгодится QSettings. А дальше будет видно.
        Здравствуйте!
        Немного изменил проект Dialog Majestio - сделал несколько файлов (архив qtTestLayout.zip). Все нормально работает, элементы управления на форме появляются. Поскольку в программе на C# форма имеет кнопки изменения размеров окна, решил заменить Dialog на MainWindow. Программа компилируется, но элементы управления не создаются, появляется просто пустая форма с заголовком. Отладчик показывает, что при выполнении программы метод SetupWidgets вызывается и операторы в нем выполняются. Помогите, пожалуйста, разобраться, почему так происходит. Проект прикрепил.
        Прикреплённый файлПрикреплённый файлqtTestLayout.zip (4,7 Кбайт, скачиваний: 5)
        Прикреплённый файлПрикреплённый файлqtAdc.pro (591 байт, скачиваний: 7)
          tumanovalex, есть два варианта:

          1) Ты возвращаешь тип формы как QDialog, и добавляешь необходимые системные иконки путём вызова в конструкторе:

          ExpandedWrap disabled
            setWindowFlags(windowFlags() | Qt::WindowMinMaxButtonsHint);

          Не тестировал, написал навскидку. Лучше все же ознакомится с темой Window Flags

          2) Твой вариант с QMainWindow. Тут немного по-другому. Сперва создаётся QWidget самого верхнего уровня. В него собирается всё содержимое окна. Потом этот виджет устанавливается в качестве центрального с помощью setCentralWidget(QWidget *widget) (ссылка).

          Добавлено
          Да, еще ... есть разница в показе формы как диалога из main.cpp:

          ExpandedWrap disabled
            dialog.exec(); // Модальный режим
            //или
            dialog.show(); // Немодальный режим
            А вообще в QtCreator сейчас дизайнером пользоваться можно? Как оно?
            ЗЫ
            Переделывал в 2008г. программы на Дельфи в QTcreator на С++ (перешел на линукс). С дизайнером не получилось справиться. Рисовал окна и контролы, вроде нормально было, а когда что-то изменить надо было, получалось криво.
            Плюнул и сделал все в рантайме - все стало хорошо.
            Кстати, часть программ скомпилил в Lazarus - без проблем.
              SergeyIT, в принципе примитивные статические формы в QtCreator'е делать можно. Как говорят на "вкус и цвет" ... Но я по опыту просто не советую. Со временем и простые формы кодировать получается не сильно медленнее, чем "рисовать" в дизайнере. Повторяться не буду, тут уже было обширное обсуждение.
                Majestio, спасибо, не видел этого обсуждения.
                  Решил использовать для первой вкладки QGridLayout:
                  ExpandedWrap disabled
                    void MainWindow::SetupWidgets() {
                      setWindowTitle("Такая программка");
                      setMinimumSize(640,480);
                      // Инициализирование табов и помещение в макет
                      TabWidget = new QTabWidget;
                      for (auto i=0; i<3; i++)
                        Tabs.push_back(new QWidget);
                      TabWidget->addTab(Tabs[0],"Настройка программы");
                      TabWidget->addTab(Tabs[1],"Графики");
                      TabWidget->addTab(Tabs[2],"Вывод результатов");
                      setCentralWidget(TabWidget);
                      // Создание лайаута для таба 0
                      QGridLayout *layTab0 = new QGridLayout;
                      Tabs[0]->setLayout(layTab0);
                      // Создание групбокса "Каналы"
                      QGroupBox *grbChannels = new QGroupBox("Каналы");
                      for (auto i = 0; i < 16; i++)
                        Checks.push_back(new QCheckBox(QString::number(i+1)));
                      QGridLayout *layCheck = new QGridLayout;
                      grbChannels->setLayout(layCheck);
                      for (int i = 0; i < 16; ++i)
                        layCheck->addWidget (Checks[i], i % 8, i / 8);
                      grbChannels->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
                      layTab0->addWidget(grbChannels, 0, 0, Qt::AlignLeft);
                    }
                  Вид grbChannels не нравится: сверху и снизу флажков много свободного места и расстояние между флажками большое. При разворачивании экрана вид еще хуже. Подскажите, пожалуйста, как улучшить вид групбокса и сделать так, чтобы при максимизации экрана размеры групбокса не изменялись.
                  Прикреплённая картинка
                  Прикреплённая картинка

                  Прикреплённый файлПрикреплённый файлqtAdc.zip (3,32 Кбайт, скачиваний: 3)
                  Сообщение отредактировано: tumanovalex -
                    tumanovalex, как мы договаривались ранее - я тебе код не пишу. Но даю наводку ...
                    Если хочешь элементы управления в твоём гриде "отталкивать" в какую либо сторону (или стороны) - используй addStretch. Читай доки, ищи примеры.
                      Получилось с помощью addStretch и setFixedSize:
                      ExpandedWrap disabled
                        grbChannels->setFixedSize(350, 60);
                        ........
                        grbParamsData->setFixedSize(600, 300);
                        ........
                        QVBoxLayout *layLower = new QVBoxLayout();
                        QHBoxLayout *layButtons = new QHBoxLayout();
                        layButtons->addWidget(grbSettings);
                        layButtons->addWidget(grbAdc);
                        layLower->addLayout(layButtons);
                        layLower->addStretch(0);
                        layTab0->addLayout(layLower, 1, 0, Qt::AlignLeft);
                      Не очень понял, почему изменение значений в addStretch не изменяет расположения layLower по отношению к grbParamsData. При разных значениях addStretch layLower подтягивается к layParamsData, при нуле то же самое. Наверное, использовать setFixedSize неправильно (не универсально для разных мониторов), но как сделать правильно я не знаю. Надеюсь на Вашу помощь в виде пояснений. Проект прикрепил.
                      Прикреплённый файлПрикреплённый файлqtAdc.zip (4,25 Кбайт, скачиваний: 2)
                        tumanovalex, лучше покажи скрин, и на нем стрелками укажи что не нравится, и что куда нужно передвинуть.
                          Цитата tumanovalex @
                          Не очень понял, почему изменение значений в addStretch не изменяет расположения layLower по отношению к grbParamsData.

                          Дам наводку. Хотя тебе бы было более полезно самому RTFM. Как работает addStretch? Это, считай, "псевдо-виджет", который просто вставляет пустое пространство, которое может раздвигать соседние элементы в лайауте.

                          Простой вариант: есть несколько виджетов, вставленных в лауаут, и один addStretch(1) - он эти элементы раздвинет влево-вправо, или вверх-вниз, в зависимости от типа лайаута
                          Более сложный вариант: есть несколько виджетов, вставленных в лауаут, и есть несколько addStretch, пусть один будет с аргументом 1, а второй 3. Они также будут раздвигать соседние виджеты. Но тут разница в том, что первый addStretch постарается раздвинуть соседние элементы так, чтобы раздвигаемое пространство было примерно равно 1/3 раздвигаемому пространству второго addStretch.

                          Лайфхак! :lol:

                          Для теста таких "вещей" заведи подкаталог с проектами-тестами. Почитал доку, осознал, протестируй в очередном тестовом проекте. Убедись.
                          ...Ну и чтобы закрепить это "действо" - этот каталог назови не Tests, а Testo. В честь моих когда-то таких же "стартов", когда тесты нужно было месить как тесто :lol: А иначе никак - в то время для меня тогдашнего так не хватало меня сегодняшнего.
                            При запуске программы расстояние между меткой с надписью "Выбран файл для записи результатов" и групбоксами ниже небольшое. При максимизации экрана это расстояние становится большим. Скриншоты и проект без setFixedSize прикрепил. Подскажите, пожалуйста, каким графическим редактором лучше пользоваться для нанесения разноцветных стрелок, овалов и надписей на рисунках. Я пользуюсь XnView, в этой программе мне не удалось сделать стрелки и овалы.
                            Прикреплённая картинка
                            Прикреплённая картинка

                            Прикреплённая картинка
                            Прикреплённая картинка

                            Прикреплённый файлПрикреплённый файлqtAdc.zip (4,25 Кбайт, скачиваний: 5)

                            Добавлено
                            Хотелось бы также научиться задавать расстояние между групбоксами, например групбоксом "Параметры настройки..." и групбоксами "Сохранение настроек" и "Работа с АЦП". Сейчас они придвинулись вплотную, а хотелось бы установить заданное расстояние.
                              Цитата tumanovalex @
                              Подскажите, пожалуйста, каким графическим редактором лучше пользоваться для нанесения разноцветных стрелок, овалов и надписей на рисунках. Я пользуюсь XnView, в этой программе мне не удалось сделать стрелки и овалы.

                              Для получения скриншотов и быстрого нанесения там же линий, стрелок и прямоугольников лучше всего использовать Lightshot.
                                Цитата tumanovalex @
                                При максимизации экрана это расстояние становится большим.

                                Ну я твой код не буду переписывать. Просто посмотри как работает "расширитель", сделай тестовый пример:

                                ExpandedWrap disabled
                                  Dialog::Dialog(QWidget *parent)
                                      : QDialog(parent) {
                                      QVBoxLayout *L = new QVBoxLayout();
                                      QPushButton *B1 = new QPushButton("111");
                                      QPushButton *B2 = new QPushButton("222");
                                      QPushButton *B3 = new QPushButton("333");
                                      L->addWidget(B1);
                                      L->addWidget(B2);
                                      L->addWidget(B3);
                                      L->addStretch(1); // посмотри как эта строчка влияет - пробуй ее закомментировать и пересобрать, потом сними комменты и опять пересобери
                                      setLayout(L);
                                      setMinimumSize(640,480);
                                  }
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1013 ]   [ 24 queries used ]   [ Generated: 8.02.25, 13:07 GMT ]