Напиши программу, которая с помощью фреймворка QT ...
Создано: 13 апреля 2025 г.
Создано: 13 апреля 2025 г.
Напиши программу, которая с помощью фреймворка QT получает дату из lineEdit в виде dd.mm.yyyy и преобразует ее в день год и месяц
Вот пример программы на Python с использованием фреймворка PyQt5, которая получает дату в формате dd.mm.yyyy
из виджета QLineEdit
и преобразует её в день, месяц и год:
pythonimport sys from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QVBoxLayout, QLabel from PyQt5.QtCore import QDate class DateConverterApp(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): # Создание виджетов self.line_edit = QLineEdit(self) self.convert_button = QPushButton('Преобразовать', self) self.result_label = QLabel('Введите дату в формате dd.mm.yyyy', self) # Установка макета layout = QVBoxLayout() layout.addWidget(self.line_edit) layout.addWidget(self.convert_button) layout.addWidget(self.result_label) self.setLayout(layout) # Подключение кнопки к функции self.convert_button.clicked.connect(self.convert_date) # Настройки окна self.setWindowTitle('Конвертер даты') self.setGeometry(100, 100, 300, 150) self.show() def convert_date(self): # Получение строки из QLineEdit date_text = self.line_edit.text() # Попытка преобразования строки в дату try: date = QDate.fromString(date_text, 'dd.MM.yyyy') if date.isValid(): day = date.day() month = date.month() year = date.year() self.result_label.setText(f'День: {day}, Месяц: {month}, Год: {year}') else: self.result_label.setText('Неверный формат даты') except Exception as e: self.result_label.setText('Ошибка преобразования даты') if __name__ == '__main__': app = QApplication(sys.argv) ex = DateConverterApp() sys.exit(app.exec_())
QLineEdit
для ввода даты в формате dd.mm.yyyy
.QDate
.QLabel
).Для того чтобы запустить программу, нужно установить PyQt5
с помощью команды:
bashpip install PyQt5
Затем можно просто запустить программу.
на C++
Ниже приведён минимальный пример на C++ с использованием Qt (версии 5 или 6), который получает дату из QLineEdit
в формате dd.mm.yyyy
и преобразует её в день, месяц и год.
main.cpp:
cpp#include <QApplication> #include <QWidget> #include <QLineEdit> #include <QPushButton> #include <QVBoxLayout> #include <QLabel> #include <QDate> class DateConverter : public QWidget { Q_OBJECT public: DateConverter(QWidget *parent = nullptr) : QWidget(parent) { // Создаём виджеты lineEdit = new QLineEdit(this); convertButton = new QPushButton("Преобразовать", this); resultLabel = new QLabel("Введите дату в формате dd.mm.yyyy", this); // Создаём вертикальный лейаут (макет) QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(lineEdit); layout->addWidget(convertButton); layout->addWidget(resultLabel); // Подключаем сигнал нажатия кнопки к слоту convertDate connect(convertButton, &QPushButton::clicked, this, &DateConverter::convertDate); // Настройки окна setWindowTitle("Конвертер даты"); resize(300, 150); } private slots: void convertDate() { QString dateText = lineEdit->text(); QDate date = QDate::fromString(dateText, "dd.MM.yyyy"); // парсим строку как дату if (date.isValid()) { int day = date.day(); int month = date.month(); int year = date.year(); resultLabel->setText( QString("День: %1, Месяц: %2, Год: %3").arg(day).arg(month).arg(year)); } else { resultLabel->setText("Неверный формат даты"); } } private: QLineEdit *lineEdit; QPushButton *convertButton; QLabel *resultLabel; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); DateConverter window; window.show(); return app.exec(); }
dd.mm.yyyy
.convertDate()
.QDate
по формату dd.mm.yyyy
.main.cpp
(или замените содержимое сгенерированного main.cpp
на приведённое).Не используй QDate
Ниже представлен пример кода на C++, в котором мы вручную (через разбиение строки по символу .
) получаем день, месяц и год из строки формата dd.mm.yyyy
в QLineEdit
. Мы не используем класс QDate
:
main.cpp:
cpp#include <QApplication> #include <QWidget> #include <QLineEdit> #include <QPushButton> #include <QVBoxLayout> #include <QLabel> class DateConverter : public QWidget { Q_OBJECT public: DateConverter(QWidget *parent = nullptr) : QWidget(parent) { // Создаём виджеты lineEdit = new QLineEdit(this); convertButton = new QPushButton("Преобразовать", this); resultLabel = new QLabel("Введите дату в формате dd.mm.yyyy", this); // Создаём вертикальный лейаут (макет) QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(lineEdit); layout->addWidget(convertButton); layout->addWidget(resultLabel); // Подключаем сигнал нажатия кнопки к слоту convertDate connect(convertButton, &QPushButton::clicked, this, &DateConverter::convertDate); // Настройки окна setWindowTitle("Конвертер даты"); resize(300, 150); } private slots: void convertDate() { // Получаем текст из QLineEdit QString dateText = lineEdit->text(); // Разбиваем строку по символу '.' ожидая три части: день, месяц, год QStringList parts = dateText.split("."); if (parts.size() == 3) { bool okDay = false, okMonth = false, okYear = false; int day = parts[0].toInt(&okDay); int month = parts[1].toInt(&okMonth); int year = parts[2].toInt(&okYear); // Проверяем, что все части корректно преобразовались в числа if (okDay && okMonth && okYear) { // Дополнительно можно проверить корректность значений day, month, year resultLabel->setText( QString("День: %1, Месяц: %2, Год: %3") .arg(day).arg(month).arg(year) ); } else { resultLabel->setText("Неверный формат даты (не удалось преобразовать числа)"); } } else { resultLabel->setText("Неверный формат даты (ожидается dd.mm.yyyy)"); } } private: QLineEdit* lineEdit; QPushButton* convertButton; QLabel* resultLabel; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); DateConverter window; window.show(); return app.exec(); }
QStringList parts = dateText.split(".");
, чтобы получить три подстроки по разделителю .
: parts[0]
, parts[1]
, parts[2]
.toInt(&ok)
возвращает число и устанавливает флаг ok
в true
, если преобразование прошло успешно.okDay
, okMonth
и okYear
истинны, значит, все три подстроки корректно преобразовались в целые числа.day
должен быть от 1 до 31, month
— от 1 до 12), чтобы исключить невалидные даты.также надо учесть, что может быть введена дата до нашей эры, например: 01.01.-0077
Ниже приведён пример на C++, где мы не используем QDate
, но при этом учитываем возможность ввода года до нашей эры (отрицательные значения года). Дата должна вводиться в формате dd.mm.yyyy
, например: 01.01.-0077
.
cpp#include <QApplication> #include <QWidget> #include <QLineEdit> #include <QPushButton> #include <QVBoxLayout> #include <QLabel> class DateConverter : public QWidget { Q_OBJECT public: DateConverter(QWidget *parent = nullptr) : QWidget(parent) { // Создаём виджеты lineEdit = new QLineEdit(this); convertButton = new QPushButton("Преобразовать", this); resultLabel = new QLabel("Введите дату в формате dd.mm.yyyy (год может быть отрицательным)", this); // Создаём вертикальный лейаут (макет) QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(lineEdit); layout->addWidget(convertButton); layout->addWidget(resultLabel); // Подключаем сигнал нажатия кнопки к слоту convertDate connect(convertButton, &QPushButton::clicked, this, &DateConverter::convertDate); // Настройки окна setWindowTitle("Конвертер даты"); resize(300, 150); } private slots: void convertDate() { // Получаем текст из QLineEdit QString dateText = lineEdit->text().trimmed(); // Разбиваем строку по символу '.' ожидая три части: день, месяц, год QStringList parts = dateText.split('.'); if (parts.size() != 3) { resultLabel->setText("Неверный формат даты (ожидается dd.mm.yyyy)"); return; } // Преобразуем части в числа (день и месяц ожидаются целыми положительными, год может быть отрицательным) bool okDay = false, okMonth = false, okYear = false; int day = parts[0].toInt(&okDay); int month = parts[1].toInt(&okMonth); int year = parts[2].toInt(&okYear); // Здесь может быть и отрицательное число // Проверяем корректность преобразования if (!okDay || !okMonth || !okYear) { resultLabel->setText("Неверный формат даты (не удалось преобразовать числа)"); return; } // Дополнительно проверяем диапазон дня и месяца // (если нужно более строгое правило проверки дат, можно доработать) if (day < 1 || day > 31) { resultLabel->setText("Неверный день (диапазон 1..31)"); return; } if (month < 1 || month > 12) { resultLabel->setText("Неверный месяц (диапазон 1..12)"); return; } // Показ результата // Пример: "День: 1, Месяц: 1, Год: -77" resultLabel->setText( QString("День: %1, Месяц: %2, Год: %3") .arg(day) .arg(month) .arg(year) ); } private: QLineEdit* lineEdit; QPushButton* convertButton; QLabel* resultLabel; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); DateConverter window; window.show(); return app.exec(); }
split('.')
, чтобы получить три части: день, месяц и год (который может быть отрицательным).-0077
превращается в -77
.okDay
, okMonth
, okYear == false
), выводим сообщение об ошибке.День: X, Месяц: Y, Год: Z
.