LINUX.ORG.RU

Я не понимаю Qt

 ,


0

1

Всем привет.

Нужно нарисовать QR-код, под андройдом. Апп на Qt Widget, не спрашивайте почему. Для QR кодов использую эту либу. В общем хочу сгенерировать QPixmap и кинуть его в QLabel:

void FormQR::paintQR(QPainter &painter, const QSize sz, const QString &data, QColor fg) {
    // NOTE: At this point you will use the API to get the encoding and format you want, instead of my hardcoded stuff:
    qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(data.toUtf8().constData(), qrcodegen::QrCode::Ecc::LOW);
    const int s=qr.getSize()>0?qr.getSize():1;
    const double w=sz.width();
    const double h=sz.height();
    const double aspect=w/h;
    const double size=((aspect>1.0)?h:w);
    const double scale=size/(s+2);
    // NOTE: For performance reasons my implementation only draws the foreground parts in supplied color.
    // It expects background to be prepared already (in white or whatever is preferred).
    painter.setPen(Qt::NoPen);
    painter.setBrush(fg);
    for(int y=0; y<s; y++) {
        for(int x=0; x<s; x++) {
            const int color=1; //qr.getModule(x, y);  // 0 for white, 1 for black
            if(0!=color) {
                const double rx1=(x+1)*scale, ry1=(y+1)*scale;
                QRectF r(rx1, ry1, scale, scale);
                painter.drawRects(&r,1);
            }
        }
    }
    QPixmap *pix = new QPixmap(sz.width(), sz.height());
    painter.drawPixmap(0, 0, *pix);
    painter.end();
    ui->label_qr->setPixmap(*pix);
}

void FormQR::updateQRImage()
{
    QPixmap *pix = new QPixmap(QSize(200,200));
    QPainter *painter = new QPainter(pix);
    QSize sz = QSize(200, 200);
    paintQR(*painter, sz, tr("Test"), QColor::fromRgb(Qt::red));
}

Помогите плиз понять, что не так?

★★★★
Ответ на: комментарий от AntonyRF

просто нихера не рисует

А он и не должен. Ты создаёшь 2 pixmap’а, на одном рисуешь, а другой, пустой, передаёшь в qlabel.

slovazap ★★★★★
()
Ответ на: комментарий от AntonyRF

Ты точно хоть на каком-то ЯП программировал раньше? Ты просто создаешь пустой объект и рисуешь его, забросив всё то, что делал ранее. Мде.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Чёт я не представляю даже как так факапнуться можно было. Это копипаста кусками наверно? Я ппримерно так же копировал куски кода и надеялся что они заработают, не читая, когда мне было лет 10. Быстро научился что это так не работает обычно.

anonymous
()

На «заре туманной юности» все Pen, Brush, ... QT утянула у Microsoft.
Скорее всего вам полезно /даже более того нужно/ почитать manuals об низкоуровневом GDI ...

Владимир

anonymous
()
Ответ на: комментарий от darkenshvein

От перемены мест слагаемых сумма не меняется.

anonymous
()

сначала научись расставлять отступы между операторами, и не присваивать значения нескольким переменным в одной строке

tz4678 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.