t
tettaМамыр 13, 2017, 3:10 Т.Қ.

Создание кнопки "new", "save" и "open". MDI. toolBar

qt, toobar, mdi, button:new, open, save

New-как его можно сделать, с помощью какого класса и как дать ему свое расширение(там png, jpg, но свое)? MDI- по этой статье сделал окно, как задать ему статичный размер, что бы он не мог менятся, а также, что бы его нельзя было растягивать в разные стороны, и сразу же, как когда я создаю файл в "new", дать ему название? Save-ну тут ясно, что бы все сохранялось, все что в окне и название проекта, вопще все, созданный с помощью "new" Open-ну тут тоже ясно, как открыть то проект, что я создал. toolbar-как сделать так, что бы одни были сверху, когда я бы запускал программу, а другие справа? *(вот все сразу, что бы потом не мучились, я и вы)

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

12
Evgenii Legotckoi
  • Мамыр 14, 2017, 1:53 Т.Ж.

Чтобы задать фиксированный размер окна в QMdiArea , нужно устанавливать фиксированный размер в QMdiSubWindow . Выглядеть это будет так:

QWidget *widget = new QWidget(mdiArea);
QMdiSubWindow* subWindow = mdiArea->addSubWindow(widget);
subWindow->setFixedSize(200, 150);  // Установка фиксированного размера
widget->setWindowTitle("Some Title"); // Установка заголовка окна
widget->show();

Что касается расположения ToolBar`ов, заметьте не кнопок, а самих тулбаров с кнопками, то при добавлении их в окно приложения, можно сразу указать, где они должны будут располагаться:

firstToolBar = new QToolBar("First Toolbar");
addToolBar(Qt::TopToolBarArea, firstToolBar);  // Сверху

secondToolBar = new QToolBar("Second Toolbar");
addToolBar(Qt::RightToolBarArea, secondToolBar); // Справа

А теперь по кнопкам New, Open, Save. Вопрос в том, с каким типом контента вы работаете? Изображения, текстовая информация, или что-то иное. Механизм в целом будет везде похожий, на эти кнопки навешиваете слоты обработки клика или срабатывания, а уже в слотах добавляете нужную логику.

Для открытия проекта с нужным расширением, нужно просто указать расширения для диалога открытия файла.

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                "C:/",
                                                tr("Project (*.someext"));

Получив имя файла уже открываете его так, как Вам нужно, если изображение, то через QImage или QPixmap, если это текстовый формат, то через QFile и парсинг, если SVG, то через QSvgRenderer и добавление этого добра в QGraphicsScene. И всё это добавляете в widget, который будет помещаться в QMdiArea, как в той статье сделано с QLabel

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

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

Естественно, что всё выше перечисленное для кнопок открытия, сохранения, и создания нового проекта будет весьма специфичным для конкретного вида проекта.

    t
    • Мамыр 14, 2017, 4:39 Т.Ж.

    А вот я хочу сохранять целый проект, что-то вроде у qt. То мне использовать что? SVG?

      Evgenii Legotckoi
      • Мамыр 14, 2017, 5:18 Т.Ж.

      SVG - это векторная графика, такой софт как Corel Draw, Inkscape, например, используют данный формат.

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

      Наиболее адекватным решением будет созданием проекта либо в XML формате, либо в JSON формате. Просто можно придумать своё собственное расширение, а формат будет один из этих двух. Тем более, что в Qt имеются средства работы с обоими форматами. И то это будет не для всех проектов.

      Вообще, выбирать формат проекта нужно исходя из тех задач, которые будет решать софт, а я понятия не имею, что Вы вообще пытаетесь написать. Начинать нужно с сути проекта, а не с выбора средств.

        t
        • Мамыр 14, 2017, 4:25 Т.Қ.

        Что бы я не создавал новый вопрос* Можно ли мне статью, где используете диалоги и что бы программа была сложная, где используется диалог

          Evgenii Legotckoi
          • Мамыр 15, 2017, 2:26 Т.Ж.

          Вот в этих статьях есть и восстановление из файла и сохранение в файл. Работа идёт с SVG файлами.

          1. Сохранение объектов в SVG
          2. Восстановление данных из SVG
            t
            • Мамыр 15, 2017, 5:37 Т.Қ.

            А можно мне статью на QDialog, мне нужно. Чем больше, тем лучше.

              Evgenii Legotckoi
              • Мамыр 16, 2017, 12:03 Т.Ж.

              По возможности, пользуйтесь поиском по сайту самостоятельно ))

              Вот одна из статей, где есть QDialog

                t
                • Мамыр 22, 2017, 5:30 Т.Қ.

                А вот кнопка открытия. Там вылазит табличка, как её убрать и как сделать что бы выбирался не диск С:\, а последняя папка, откуда брал?

                  t
                  • Мамыр 22, 2017, 5:33 Т.Қ.

                  А еще там слева сверху как иконку поставить?

                    Evgenii Legotckoi
                    • Мамыр 23, 2017, 1:27 Т.Ж.

                    Сохранять предварительно этот путь в какую-нибудь переменную типа QString. А потом использовать её для открытия нового диалога.

                    QString path;
                    QString fileName = QFileDialog::getOpenFileName(this, caption, path);
                    if (!fileName.isNull())
                    {
                        ...
                        path = QFileInfo(fileName).path(); // Сохранить путь к файлу для следующего открытия диалога
                    }

                    И вообще, какая табличка? Вы порой как скажете, так хоть батальон экстрасенсов вызывай.

                    Что касается иконки. Есть метод setWindowIcon(), через него и можете иконку выставлять.

                      t
                      • Мамыр 23, 2017, 7:59 Т.Ж.
                      void MainWindow::open(){
                           QString openFile = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                                                    "C:/",
                                                                                 tr("Project (*.someext"));
                      }
                      И вот фотография той таблички!

                        Evgenii Legotckoi
                        • Мамыр 24, 2017, 3:18 Т.Ж.

                        мда... Такие таблички надо сразу показывать. За два года работы с Qt я ни разу не получал такой ошибки. Ну и что Вы сделали, что умудрились такое отхватить? Впрочем, в этой табличке и так сказано, в чём ошибка. Вы ведь её читали?

                        Вы передаёте неверный путь, пытаясь открыть какой-то каталог или файл. Либо этот файл невозможно открыть, или он уже не существует. Также могут быть проблемы с кодировкой пути к файлу, что менее вероятно.

                        Проанализируйте свои действия. Что делали, как делали, может поймёте, где косяк. Мне здесь сказать нечего. Код что Вы привели, не может являться причиной этой ошибки.

                          Пікірлер

                          Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                          Кіріңіз немесе Тіркеліңіз
                          OI
                          • Ora Iro
                          • Жел. 24, 2024, 2:38 Т.Қ.

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

                          • Нәтиже:40ұпай,
                          • Бағалау ұпайлары-8
                          AD

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

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

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

                          • Нәтиже:80ұпай,
                          • Бағалау ұпайлары4
                          Соңғы пікірлер
                          ИМ
                          Игорь МаксимовҚар. 22, 2024, 7:51 Т.Қ.
                          Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                          Evgenii Legotckoi
                          Evgenii LegotckoiҚаз. 31, 2024, 9:37 Т.Қ.
                          Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                          A
                          ALO1ZEҚаз. 19, 2024, 3:19 Т.Қ.
                          Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                          ИМ
                          Игорь МаксимовҚаз. 5, 2024, 2:51 Т.Қ.
                          Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                          d
                          dblas5Шілде 5, 2024, 6:02 Т.Қ.
                          QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                          Енді форумда талқылаңыз
                          Evgenii Legotckoi
                          Evgenii LegotckoiМаусым 24, 2024, 10:11 Т.Қ.
                          добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                          t
                          tonypeachey1Қар. 15, 2024, 2:04 Т.Қ.
                          google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                          NSProject
                          NSProjectМаусым 4, 2022, 10:49 Т.Ж.
                          Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                          9
                          9AnonimҚаз. 25, 2024, 4:10 Т.Қ.
                          Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

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