Wladimir J. van der Laan
13 years ago
13 changed files with 434 additions and 7 deletions
@ -0,0 +1,213 @@
@@ -0,0 +1,213 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<ui version="4.0"> |
||||
<class>QRCodeDialog</class> |
||||
<widget class="QDialog" name="QRCodeDialog"> |
||||
<property name="geometry"> |
||||
<rect> |
||||
<x>0</x> |
||||
<y>0</y> |
||||
<width>320</width> |
||||
<height>404</height> |
||||
</rect> |
||||
</property> |
||||
<property name="windowTitle"> |
||||
<string>Dialog</string> |
||||
</property> |
||||
<layout class="QVBoxLayout" name="verticalLayout_3"> |
||||
<item> |
||||
<widget class="QLabel" name="lblQRCode"> |
||||
<property name="sizePolicy"> |
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding"> |
||||
<horstretch>0</horstretch> |
||||
<verstretch>0</verstretch> |
||||
</sizepolicy> |
||||
</property> |
||||
<property name="minimumSize"> |
||||
<size> |
||||
<width>300</width> |
||||
<height>300</height> |
||||
</size> |
||||
</property> |
||||
<property name="text"> |
||||
<string>QR Code</string> |
||||
</property> |
||||
<property name="alignment"> |
||||
<set>Qt::AlignCenter</set> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
<item> |
||||
<widget class="QWidget" name="widget" native="true"> |
||||
<layout class="QVBoxLayout" name="verticalLayout_2"> |
||||
<item> |
||||
<layout class="QHBoxLayout" name="horizontalLayout_2"> |
||||
<item> |
||||
<layout class="QVBoxLayout" name="verticalLayout"> |
||||
<item> |
||||
<widget class="QCheckBox" name="chkReq"> |
||||
<property name="enabled"> |
||||
<bool>true</bool> |
||||
</property> |
||||
<property name="text"> |
||||
<string>Request Payment</string> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
<item> |
||||
<layout class="QHBoxLayout" name="horizontalLayout"> |
||||
<item> |
||||
<widget class="QLabel" name="lblAm1"> |
||||
<property name="sizePolicy"> |
||||
<sizepolicy hsizetype="Preferred" vsizetype="Maximum"> |
||||
<horstretch>0</horstretch> |
||||
<verstretch>0</verstretch> |
||||
</sizepolicy> |
||||
</property> |
||||
<property name="text"> |
||||
<string>Amount:</string> |
||||
</property> |
||||
<property name="alignment"> |
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> |
||||
</property> |
||||
<property name="buddy"> |
||||
<cstring>lnReqAmount</cstring> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
<item> |
||||
<widget class="QLineEdit" name="lnReqAmount"> |
||||
<property name="enabled"> |
||||
<bool>false</bool> |
||||
</property> |
||||
<property name="minimumSize"> |
||||
<size> |
||||
<width>60</width> |
||||
<height>0</height> |
||||
</size> |
||||
</property> |
||||
<property name="alignment"> |
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
<item> |
||||
<widget class="QLabel" name="lblAm2"> |
||||
<property name="sizePolicy"> |
||||
<sizepolicy hsizetype="Preferred" vsizetype="Maximum"> |
||||
<horstretch>0</horstretch> |
||||
<verstretch>0</verstretch> |
||||
</sizepolicy> |
||||
</property> |
||||
<property name="text"> |
||||
<string>BTC</string> |
||||
</property> |
||||
<property name="buddy"> |
||||
<cstring>lnReqAmount</cstring> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
</layout> |
||||
</item> |
||||
</layout> |
||||
</item> |
||||
<item> |
||||
<layout class="QGridLayout" name="gridLayout"> |
||||
<item row="0" column="0"> |
||||
<widget class="QLabel" name="label_3"> |
||||
<property name="text"> |
||||
<string>Label:</string> |
||||
</property> |
||||
<property name="alignment"> |
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> |
||||
</property> |
||||
<property name="buddy"> |
||||
<cstring>lnLabel</cstring> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
<item row="0" column="1"> |
||||
<widget class="QLineEdit" name="lnLabel"> |
||||
<property name="minimumSize"> |
||||
<size> |
||||
<width>100</width> |
||||
<height>0</height> |
||||
</size> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
<item row="1" column="0"> |
||||
<widget class="QLabel" name="label_4"> |
||||
<property name="text"> |
||||
<string>Message:</string> |
||||
</property> |
||||
<property name="alignment"> |
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> |
||||
</property> |
||||
<property name="buddy"> |
||||
<cstring>lnMessage</cstring> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
<item row="1" column="1"> |
||||
<widget class="QLineEdit" name="lnMessage"> |
||||
<property name="minimumSize"> |
||||
<size> |
||||
<width>100</width> |
||||
<height>0</height> |
||||
</size> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
</layout> |
||||
</item> |
||||
</layout> |
||||
</item> |
||||
<item> |
||||
<layout class="QHBoxLayout" name="horizontalLayout_3"> |
||||
<item> |
||||
<spacer name="horizontalSpacer"> |
||||
<property name="orientation"> |
||||
<enum>Qt::Horizontal</enum> |
||||
</property> |
||||
<property name="sizeHint" stdset="0"> |
||||
<size> |
||||
<width>40</width> |
||||
<height>20</height> |
||||
</size> |
||||
</property> |
||||
</spacer> |
||||
</item> |
||||
<item> |
||||
<widget class="QPushButton" name="btnSaveAs"> |
||||
<property name="text"> |
||||
<string>&Save As...</string> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
</layout> |
||||
</item> |
||||
</layout> |
||||
</widget> |
||||
</item> |
||||
</layout> |
||||
</widget> |
||||
<resources/> |
||||
<connections> |
||||
<connection> |
||||
<sender>chkReq</sender> |
||||
<signal>clicked(bool)</signal> |
||||
<receiver>lnReqAmount</receiver> |
||||
<slot>setEnabled(bool)</slot> |
||||
<hints> |
||||
<hint type="sourcelabel"> |
||||
<x>92</x> |
||||
<y>285</y> |
||||
</hint> |
||||
<hint type="destinationlabel"> |
||||
<x>98</x> |
||||
<y>311</y> |
||||
</hint> |
||||
</hints> |
||||
</connection> |
||||
</connections> |
||||
</ui> |
@ -0,0 +1,106 @@
@@ -0,0 +1,106 @@
|
||||
#include "qrcodedialog.h" |
||||
#include "ui_qrcodedialog.h" |
||||
#include <QPixmap> |
||||
#include <QUrl> |
||||
#include <QFileDialog> |
||||
#include <QDesktopServices> |
||||
#include <QDebug> |
||||
|
||||
#include <qrencode.h> |
||||
|
||||
#define EXPORT_IMAGE_SIZE 256 |
||||
|
||||
QRCodeDialog::QRCodeDialog(const QString &title, const QString &addr, const QString &label, bool enableReq, QWidget *parent) : |
||||
QDialog(parent), |
||||
ui(new Ui::QRCodeDialog), |
||||
address(addr) |
||||
{ |
||||
ui->setupUi(this); |
||||
setWindowTitle(title); |
||||
setAttribute(Qt::WA_DeleteOnClose); |
||||
|
||||
ui->chkReq->setVisible(enableReq); |
||||
ui->lnReqAmount->setVisible(enableReq); |
||||
ui->lblAm1->setVisible(enableReq); |
||||
ui->lblAm2->setVisible(enableReq); |
||||
|
||||
ui->lnLabel->setText(label); |
||||
|
||||
genCode(); |
||||
} |
||||
|
||||
QRCodeDialog::~QRCodeDialog() |
||||
{ |
||||
delete ui; |
||||
} |
||||
|
||||
void QRCodeDialog::genCode() { |
||||
|
||||
QString uri = getURI(); |
||||
//qDebug() << "Encoding:" << uri.toUtf8().constData();
|
||||
QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1); |
||||
myImage = QImage(code->width + 8, code->width + 8, QImage::Format_RGB32); |
||||
myImage.fill(0xffffff); |
||||
unsigned char *p = code->data; |
||||
for(int y = 0; y < code->width; y++) { |
||||
for(int x = 0; x < code->width; x++) { |
||||
myImage.setPixel(x + 4, y + 4, ((*p & 1) ? 0x0 : 0xffffff)); |
||||
p++; |
||||
} |
||||
} |
||||
QRcode_free(code); |
||||
ui->lblQRCode->setPixmap(QPixmap::fromImage(myImage).scaled(300, 300)); |
||||
} |
||||
|
||||
QString QRCodeDialog::getURI() { |
||||
QString ret = QString("bitcoin:%1").arg(address); |
||||
|
||||
int paramCount = 0; |
||||
if(ui->chkReq->isChecked() && ui->lnReqAmount->text().isEmpty() == false) { |
||||
bool ok= false; |
||||
double amount = ui->lnReqAmount->text().toDouble(&ok); |
||||
if(ok) { |
||||
ret += QString("?amount=%1X8").arg(ui->lnReqAmount->text()); |
||||
paramCount++; |
||||
} |
||||
} |
||||
|
||||
if(ui->lnLabel->text().isEmpty() == false) { |
||||
QString lbl(QUrl::toPercentEncoding(ui->lnLabel->text())); |
||||
ret += QString("%1label=%2").arg(paramCount == 0 ? "?" : "&").arg(lbl); |
||||
paramCount++; |
||||
} |
||||
|
||||
if(ui->lnMessage->text().isEmpty() == false) { |
||||
QString msg(QUrl::toPercentEncoding(ui->lnMessage->text())); |
||||
ret += QString("%1message=%2").arg(paramCount == 0 ? "?" : "&").arg(msg); |
||||
paramCount++; |
||||
} |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
void QRCodeDialog::on_lnReqAmount_textChanged(const QString &) { |
||||
genCode(); |
||||
} |
||||
|
||||
void QRCodeDialog::on_lnLabel_textChanged(const QString &) { |
||||
genCode(); |
||||
} |
||||
|
||||
void QRCodeDialog::on_lnMessage_textChanged(const QString &) { |
||||
genCode(); |
||||
} |
||||
|
||||
void QRCodeDialog::on_btnSaveAs_clicked() |
||||
{ |
||||
QString fn = QFileDialog::getSaveFileName(this, "Save Image...", QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation), "Images (*.png)"); |
||||
if(!fn.isEmpty()) { |
||||
myImage.scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE).save(fn); |
||||
} |
||||
} |
||||
|
||||
void QRCodeDialog::on_chkReq_toggled(bool) |
||||
{ |
||||
genCode(); |
||||
} |
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
#ifndef QRCODEDIALOG_H |
||||
#define QRCODEDIALOG_H |
||||
|
||||
#include <QDialog> |
||||
#include <QImage> |
||||
|
||||
namespace Ui { |
||||
class QRCodeDialog; |
||||
} |
||||
|
||||
class QRCodeDialog : public QDialog |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
explicit QRCodeDialog(const QString &title, const QString &address, const QString &label, bool allowReq, QWidget *parent = 0); |
||||
~QRCodeDialog(); |
||||
|
||||
private slots: |
||||
void on_lnReqAmount_textChanged(const QString &arg1); |
||||
void on_lnLabel_textChanged(const QString &arg1); |
||||
void on_lnMessage_textChanged(const QString &arg1); |
||||
void on_btnSaveAs_clicked(); |
||||
|
||||
void on_chkReq_toggled(bool checked); |
||||
|
||||
private: |
||||
Ui::QRCodeDialog *ui; |
||||
QImage myImage; |
||||
|
||||
QString getURI(); |
||||
QString address; |
||||
|
||||
void genCode(); |
||||
}; |
||||
|
||||
#endif // QRCODEDIALOG_H
|
After Width: | Height: | Size: 5.9 KiB |
Loading…
Reference in new issue