ui: Check for !pixmap() before trying to export QR code
Adds null pointer checks as well as prevents the Save/Copy context menu from appearing at all if no image is shown. Fixes issue #4140
This commit is contained in:
parent
13d3adb651
commit
9d558e1c18
2 changed files with 26 additions and 6 deletions
|
@ -16,6 +16,7 @@
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
|
#include <QMenu>
|
||||||
#if QT_VERSION < 0x050000
|
#if QT_VERSION < 0x050000
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#endif
|
#endif
|
||||||
|
@ -29,26 +30,27 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QRImageWidget::QRImageWidget(QWidget *parent):
|
QRImageWidget::QRImageWidget(QWidget *parent):
|
||||||
QLabel(parent)
|
QLabel(parent), contextMenu(0)
|
||||||
{
|
{
|
||||||
setContextMenuPolicy(Qt::ActionsContextMenu);
|
contextMenu = new QMenu();
|
||||||
|
|
||||||
QAction *saveImageAction = new QAction(tr("&Save Image..."), this);
|
QAction *saveImageAction = new QAction(tr("&Save Image..."), this);
|
||||||
connect(saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage()));
|
connect(saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage()));
|
||||||
addAction(saveImageAction);
|
contextMenu->addAction(saveImageAction);
|
||||||
QAction *copyImageAction = new QAction(tr("&Copy Image"), this);
|
QAction *copyImageAction = new QAction(tr("&Copy Image"), this);
|
||||||
connect(copyImageAction, SIGNAL(triggered()), this, SLOT(copyImage()));
|
connect(copyImageAction, SIGNAL(triggered()), this, SLOT(copyImage()));
|
||||||
addAction(copyImageAction);
|
contextMenu->addAction(copyImageAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage QRImageWidget::exportImage()
|
QImage QRImageWidget::exportImage()
|
||||||
{
|
{
|
||||||
|
if(!pixmap())
|
||||||
|
return QImage();
|
||||||
return pixmap()->toImage().scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE);
|
return pixmap()->toImage().scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QRImageWidget::mousePressEvent(QMouseEvent *event)
|
void QRImageWidget::mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
if(event->button() == Qt::LeftButton)
|
if(event->button() == Qt::LeftButton && pixmap())
|
||||||
{
|
{
|
||||||
event->accept();
|
event->accept();
|
||||||
QMimeData *mimeData = new QMimeData;
|
QMimeData *mimeData = new QMimeData;
|
||||||
|
@ -64,6 +66,8 @@ void QRImageWidget::mousePressEvent(QMouseEvent *event)
|
||||||
|
|
||||||
void QRImageWidget::saveImage()
|
void QRImageWidget::saveImage()
|
||||||
{
|
{
|
||||||
|
if(!pixmap())
|
||||||
|
return;
|
||||||
QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Image (*.png)"), NULL);
|
QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Image (*.png)"), NULL);
|
||||||
if (!fn.isEmpty())
|
if (!fn.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -73,9 +77,18 @@ void QRImageWidget::saveImage()
|
||||||
|
|
||||||
void QRImageWidget::copyImage()
|
void QRImageWidget::copyImage()
|
||||||
{
|
{
|
||||||
|
if(!pixmap())
|
||||||
|
return;
|
||||||
QApplication::clipboard()->setImage(exportImage());
|
QApplication::clipboard()->setImage(exportImage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QRImageWidget::contextMenuEvent(QContextMenuEvent *event)
|
||||||
|
{
|
||||||
|
if(!pixmap())
|
||||||
|
return;
|
||||||
|
contextMenu->exec(event->globalPos());
|
||||||
|
}
|
||||||
|
|
||||||
ReceiveRequestDialog::ReceiveRequestDialog(QWidget *parent) :
|
ReceiveRequestDialog::ReceiveRequestDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::ReceiveRequestDialog),
|
ui(new Ui::ReceiveRequestDialog),
|
||||||
|
|
|
@ -15,6 +15,9 @@ namespace Ui {
|
||||||
class ReceiveRequestDialog;
|
class ReceiveRequestDialog;
|
||||||
}
|
}
|
||||||
class OptionsModel;
|
class OptionsModel;
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QMenu;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
/* Label widget for QR code. This image can be dragged, dropped, copied and saved
|
/* Label widget for QR code. This image can be dragged, dropped, copied and saved
|
||||||
* to disk.
|
* to disk.
|
||||||
|
@ -33,6 +36,10 @@ public slots:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void mousePressEvent(QMouseEvent *event);
|
virtual void mousePressEvent(QMouseEvent *event);
|
||||||
|
virtual void contextMenuEvent(QContextMenuEvent *event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QMenu *contextMenu;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ReceiveRequestDialog : public QDialog
|
class ReceiveRequestDialog : public QDialog
|
||||||
|
|
Loading…
Reference in a new issue