https://pastein.ru/t/nU6
скопируйте уникальную ссылку для отправки
Загрузка данных
Программа для создания QR-кодов в Qt Creator (Windows)
Вот полный код рабочего приложения на C++/Qt, которое генерирует настоящие QR-коды и сохраняет их в файл PNG. Для этого мы будем использовать библиотеку QRencode, которую легко подключить в Qt.
Шаг 1: Подготовка проекта
1. Установите Qt Creator
2. Создайте новый проект "Qt Widgets Application"
3. Добавьте в файл .pro строку для подключения библиотеки QRencode:
LIBS += -lqrencode
Шаг 2: Полный код приложения
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QImage>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_generateButton_clicked();
void on_saveButton_clicked();
private:
Ui::MainWindow *ui;
QImage qrImage;
void generateQRCode(const QString &text);
};
#endif // MAINWINDOW_H"
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qrencode.h>
#include <QFileDialog>
#include <QMessageBox>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("QR Code Generator");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::generateQRCode(const QString &text)
{
if (text.isEmpty()) {
QMessageBox::warning(this, "Warning", "Please enter text first!");
return;
}
// Генерация QR-кода
QRcode *qr = QRcode_encodeString(text.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1);
if (!qr) {
QMessageBox::critical(this, "Error", "Could not generate QR code!");
return;
}
// Создание изображения
qrImage = QImage(qr->width + 8, qr->width + 8, QImage::Format_RGB32);
qrImage.fill(Qt::white);
QPainter painter(&qrImage);
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::black);
for (int y = 0; y < qr->width; y++) {
for (int x = 0; x < qr->width; x++) {
if (qr->data[y * qr->width + x] & 1) {
painter.drawRect(x + 4, y + 4, 1, 1);
}
}
}
QRcode_free(qr);
// Масштабирование для лучшего отображения
qrImage = qrImage.scaled(200, 200, Qt::KeepAspectRatio, Qt::FastTransformation);
ui->qrLabel->setPixmap(QPixmap::fromImage(qrImage));
ui->saveButton->setEnabled(true);
}
void MainWindow::on_generateButton_clicked()
{
generateQRCode(ui->textEdit->toPlainText());
}
void MainWindow::on_saveButton_clicked()
{
if (qrImage.isNull()) {
QMessageBox::warning(this, "Warning", "No QR code to save!");
return;
}
QString fileName = QFileDialog::getSaveFileName(this,
"Save QR Code", "", "PNG Images (*.png)");
if (!fileName.isEmpty()) {
if (!fileName.endsWith(".png", Qt::CaseInsensitive))
fileName += ".png";
if (qrImage.save(fileName)) {
QMessageBox::information(this, "Success", "QR code saved successfully!");
} else {
QMessageBox::critical(this, "Error", "Could not save QR code!");
}
}
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Шаг 3: UI форма (mainwindow.ui)
Создайте форму с помощью Qt Designer:
1. QLabel для отображения QR-кода
2. QTextEdit для ввода текста
3. QPushButton "Generate" (generateButton)
4. QPushButton "Save" (saveButton)
Шаг 4: Установка библиотеки QRencode
1. Скачайте библиотеку QRencode для Windows: https://fukuchi.org/works/qrencode/
2. Поместите файлы qrencode.h в папку include вашего проекта
3. Поместите qrencode.lib в папку lib
4. Добавьте в .pro файл:
INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib -lqrencode
Как это работает
1. Пользователь вводит текст в поле ввода
2. При нажатии "Generate" вызывается функция generateQRCode()
3. Библиотека QRencode создает QR-код
4. Код преобразуется в QImage и отображается в интерфейсе
5. Кнопка "Save" позволяет сохранить QR-код в PNG файл