1. изучение Qt Creator, механизма сигналов и слотов

Помечено: , ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 11 мес., 4 нед. назад.

  • Автор
    Сообщения
  • #4808
    @admin

    Цель: Знакомство со средой QtCreator, изучение механизма сигналов и слотов.

    1. Запустить QtCreator. Создать приложение Qt Widgets.
    2. Открыть форму MainWindow и создать 2 пункта главного меню: «Авторы» и «Выход». В свойстве «window title» задать заголовок окна «Лабораторная работа №1».
    3. В режиме редактирования сигналов и слотов установить соответствующий слот для меню «Выход».
    4. В файле mainwindow.cpp, пользуясь функцией connect, установить соединение со слотом About_Lab3() при выборе пункта меню «Авторы»:
      connect(ui->action_4,SIGNAL(triggered()),this,SLOT(About_Lab1()));
    5. Указать данный слот в заголовочном файле mainwindow.h, в mainwindow.cpp добавить «заглушку» для этого метода:
      private slots:
      void  About_Lab1();
    6. Разместить на форме календарь. Изучить его свойства с среде QtDesigner. Установить возможность выбора даты только на текущий год (maximumDate/minimumDate). Установить курсивный шрифт и сетку на календаре (свойство font класса QWidget изменяется в окне редактирования календаря, т.к. QCalendarWidget является наследником QWidget).
    7. Поместить на форму ComboBox справа от календаря. Под ComboBox поместить заполнитель пространства VerticalSpacer. Скомпоновать ComboBox и VerticalSpacer по вертикали (выделить оба элемента и правой кнопкой мыши выбрать компоновку). Затем выделить все и скомпоновать по горизонтали.
      PS. Можно щелкнуть правой кнопкой мыши по главному окну и выбрать компоновщик «по сетке» (Grid).
    8. Щелкнуть по ComboBox мышкой два раза и добавить все дни недели.
      Этот выпадающий список управляет, какой день будет выведен на экран в качестве первого дня недели (свойство календаря FirstDayOfWeek).
      Класс QComboBox позволяет прикреплять пользовательские данные как QVariant к каждому элементу. Позднее данные могут быть получены с помощью функции QComboBox — itemData(). 
      QVariant непосредственно не поддерживает тип данных Qt::DayOfWeek, но поддерживает int, а C++ успешно преобразует любое перечислимое значение в int.
    9. Правой кнопкой мыши на ComboBox вызвать из меню «Перейти к слоту», выбрать currentIndexChanged(int).
      Откроется обработчик, в котором прописываем:
      ui->calendarWidget->setFirstDayOfWeek(Qt::DayOfWeek(index+1));
      Здесь номер выбранного пункта приводится к типу данных «DayOfWeek» с нумерацией от 1 (Пн).
    10. Формат текста столбца календаря задан как QTextCharFormat, который кроме цвета фона позволяет задавать различную информацию о форматировании символов. Например, установим определенный цвет на первый день недели. Подключаем:
      #include <QTextCharFormat>
      и в том же обработчике выбора первого дня недели прописываем:
      QTextCharFormat format;
      format.setForeground(qvariant_cast<QColor>("green"));
      ui->calendarWidget->setWeekdayTextFormat(Qt::DayOfWeek(index+1), format);

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

    11. Создать новый класс формы Qt Designer . Назовем, например, auth (об авторах).
    12. Установить заголовок окна формы «Информация об авторах». Разработать конкурентоспособный логотип кампании по выбранному варианту из РГЗ. Установить его как иконку данной формы. Расположить рисунок логотипа на форме слева (с помощью label и его свойства pixmap). Данные об авторах разместить на форме справа в TextEdit (двойным щелчком в нем открывается редактор текста). Цвет и вид текста должен сочетаться с логотипом.
      Скомпоновать по горизонтали для правильного расположения элементов формы (выделить оба элемента и правой кнопкой мыши выбрать компоновку).
    13. В файле mainwindow.cpp прописать процедуру (заменить заглушку) открытия формы об авторах
      void MainWindow::About_Lab1()
      {
          auth *dg = new auth();
          dg->show();
      }

Для ответа в этой теме необходимо авторизоваться.