Merge bitcoin-core/gui#46: refactor: Fix deprecation warnings when building against Qt 5.15

705c1f0648c72aa97e0ee699ff9a3da23fc9bd61 qt, refactor: Fix 'buttonClicked is deprecated' warnings (Hennadii Stepanov)
c2f4e5ea1d6f01713ac69aaf6018884028aa55bd qt, refactor: Fix 'split is deprecated' warnings (Hennadii Stepanov)
8e12d6996116e786e928077b22d9f47cee27319e qt, refactor: Fix 'QFlags is deprecated' warnings (Hennadii Stepanov)
fa5749c805878304c107bcae0ae5ffa401dc7c4d qt, refactor: Fix 'pixmap is deprecated' warnings (Hennadii Stepanov)
b02264cb5dfcef50eec8a6346471cbaa25370e00 qt, refactor: Fix 'QDateTime is deprecated' warnings (Hennadii Stepanov)

Pull request description:

  [What's New in Qt 5.15](https://doc.qt.io/qt-5/whatsnew515.html#deprecated-modules):
  > To help preparing for the transition to Qt 6, numerous classes and member functions that will be removed from Qt 6.0 have been marked as deprecated in the Qt 5.15 release.

  Fixes #36

ACKs for top commit:
  jonasschnelli:
    utACK 705c1f0648c72aa97e0ee699ff9a3da23fc9bd61
  promag:
    Tested ACK 705c1f0648c72aa97e0ee699ff9a3da23fc9bd61 on macos with Apple clang version 11.0.3 (clang-1103.0.32.62) and brew qt 5.15.1.

Tree-SHA512: 29e00535b4583ceec0dfb29612e86ee29bdea13651b548c6d22167917a4a10464af49160a12b05151030699f690f437ebb9c4ae9f130f66a722415222165b44f
This commit is contained in:
MarcoFalke 2020-11-19 19:04:11 +01:00 committed by PastaPastaPasta
parent f40b0f2a9c
commit bb976499bf
17 changed files with 113 additions and 25 deletions

View File

@ -254,7 +254,7 @@ void BitcoinApplication::createWindow(const NetworkStyle *networkStyle)
void BitcoinApplication::createSplashScreen(const NetworkStyle *networkStyle) void BitcoinApplication::createSplashScreen(const NetworkStyle *networkStyle)
{ {
SplashScreen *splash = new SplashScreen(m_node, nullptr, networkStyle); SplashScreen *splash = new SplashScreen(m_node, networkStyle);
// We don't hold a direct pointer to the splash screen after creation, but the splash // We don't hold a direct pointer to the splash screen after creation, but the splash
// screen will take care of deleting itself when finish() happens. // screen will take care of deleting itself when finish() happens.
splash->show(); splash->show();

View File

@ -1858,7 +1858,7 @@ void BitcoinGUI::updateProxyIcon()
bool proxy_enabled = clientModel->getProxyInfo(ip_port); bool proxy_enabled = clientModel->getProxyInfo(ip_port);
if (proxy_enabled) { if (proxy_enabled) {
if (labelProxyIcon->pixmap() == nullptr) { if (!GUIUtil::HasPixmap(labelProxyIcon)) {
QString ip_port_q = QString::fromStdString(ip_port); QString ip_port_q = QString::fromStdString(ip_port);
labelProxyIcon->setPixmap(GUIUtil::getIcon("proxy", GUIUtil::ThemedColor::GREEN).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); labelProxyIcon->setPixmap(GUIUtil::getIcon("proxy", GUIUtil::ThemedColor::GREEN).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
labelProxyIcon->setToolTip(tr("Proxy is <b>enabled</b>: %1").arg(ip_port_q)); labelProxyIcon->setToolTip(tr("Proxy is <b>enabled</b>: %1").arg(ip_port_q));

View File

@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE
class QAction; class QAction;
class QButtonGroup; class QButtonGroup;
class QComboBox; class QComboBox;
class QDateTime;
class QMenu; class QMenu;
class QProgressBar; class QProgressBar;
class QProgressDialog; class QProgressDialog;

View File

@ -1901,4 +1901,35 @@ void LogQtInfo()
} }
} }
QDateTime StartOfDay(const QDate& date)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
return date.startOfDay();
#else
return QDateTime(date);
#endif
}
bool HasPixmap(const QLabel* label)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
return !label->pixmap(Qt::ReturnByValue).isNull();
#else
return label->pixmap() != nullptr;
#endif
}
QImage GetImage(const QLabel* label)
{
if (!HasPixmap(label)) {
return QImage();
}
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
return label->pixmap(Qt::ReturnByValue).toImage();
#else
return label->pixmap()->toImage();
#endif
}
} // namespace GUIUtil } // namespace GUIUtil

View File

@ -473,7 +473,7 @@ namespace GUIUtil
/** /**
* Returns the distance in pixels appropriate for drawing a subsequent character after text. * Returns the distance in pixels appropriate for drawing a subsequent character after text.
* *
* In Qt 5.12 and before the QFontMetrics::width() is used and it is deprecated since Qt 13.0. * In Qt 5.12 and before the QFontMetrics::width() is used and it is deprecated since Qt 5.13.
* In Qt 5.11 the QFontMetrics::horizontalAdvance() was introduced. * In Qt 5.11 the QFontMetrics::horizontalAdvance() was introduced.
*/ */
int TextWidth(const QFontMetrics& fm, const QString& text); int TextWidth(const QFontMetrics& fm, const QString& text);
@ -482,6 +482,44 @@ namespace GUIUtil
* Writes to debug.log short info about the used Qt and the host system. * Writes to debug.log short info about the used Qt and the host system.
*/ */
void LogQtInfo(); void LogQtInfo();
/**
* Returns the start-moment of the day in local time.
*
* QDateTime::QDateTime(const QDate& date) is deprecated since Qt 5.15.
* QDate::startOfDay() was introduced in Qt 5.14.
*/
QDateTime StartOfDay(const QDate& date);
/**
* Returns true if pixmap has been set.
*
* QPixmap* QLabel::pixmap() is deprecated since Qt 5.15.
*/
bool HasPixmap(const QLabel* label);
QImage GetImage(const QLabel* label);
/**
* Splits the string into substrings wherever separator occurs, and returns
* the list of those strings. Empty strings do not appear in the result.
*
* QString::split() signature differs in different Qt versions:
* - QString::SplitBehavior is deprecated since Qt 5.15
* - Qt::SplitBehavior was introduced in Qt 5.14
* If {QString|Qt}::SkipEmptyParts behavior is required, use this
* function instead of QString::split().
*/
template <typename SeparatorType>
QStringList SplitSkipEmptyParts(const QString& string, const SeparatorType& separator)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
return string.split(separator, Qt::SkipEmptyParts);
#else
return string.split(separator, QString::SkipEmptyParts);
#endif
}
} // namespace GUIUtil } // namespace GUIUtil
#endif // BITCOIN_QT_GUIUTIL_H #endif // BITCOIN_QT_GUIUTIL_H

View File

@ -125,7 +125,11 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
pageButtons->addButton(ui->btnDisplay, pageButtons->buttons().size()); pageButtons->addButton(ui->btnDisplay, pageButtons->buttons().size());
pageButtons->addButton(ui->btnAppearance, pageButtons->buttons().size()); pageButtons->addButton(ui->btnAppearance, pageButtons->buttons().size());
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
connect(pageButtons, &QButtonGroup::idClicked, this, &OptionsDialog::showPage);
#else
connect(pageButtons, QOverload<int>::of(&QButtonGroup::buttonClicked), this, &OptionsDialog::showPage); connect(pageButtons, QOverload<int>::of(&QButtonGroup::buttonClicked), this, &OptionsDialog::showPage);
#endif
showPage(0); showPage(0);

View File

@ -367,7 +367,7 @@ static ProxySetting GetProxySetting(QSettings &settings, const QString &name)
return default_val; return default_val;
} }
// contains IP at index 0 and port at index 1 // contains IP at index 0 and port at index 1
QStringList ip_port = settings.value(name).toString().split(":", QString::SkipEmptyParts); QStringList ip_port = GUIUtil::SplitSkipEmptyParts(settings.value(name).toString(), ":");
if (ip_port.size() == 2) { if (ip_port.size() == 2) {
return {true, ip_port.at(0), ip_port.at(1)}; return {true, ip_port.at(0), ip_port.at(1)};
} else { // Invalid: return default } else { // Invalid: return default

View File

@ -20,6 +20,7 @@
#include <cmath> #include <cmath>
#include <QAbstractItemDelegate> #include <QAbstractItemDelegate>
#include <QDateTime>
#include <QPainter> #include <QPainter>
#include <QSettings> #include <QSettings>
#include <QTimer> #include <QTimer>

View File

@ -27,7 +27,6 @@
#include <QApplication> #include <QApplication>
#include <QByteArray> #include <QByteArray>
#include <QDataStream> #include <QDataStream>
#include <QDateTime>
#include <QDebug> #include <QDebug>
#include <QFile> #include <QFile>
#include <QFileOpenEvent> #include <QFileOpenEvent>

View File

@ -105,15 +105,12 @@ bool QRImageWidget::setQR(const QString& data, const QString& text)
QImage QRImageWidget::exportImage() QImage QRImageWidget::exportImage()
{ {
if(!pixmap()) return GUIUtil::GetImage(this);
return QImage();
return pixmap()->toImage();
} }
void QRImageWidget::mousePressEvent(QMouseEvent *event) void QRImageWidget::mousePressEvent(QMouseEvent *event)
{ {
if(event->button() == Qt::LeftButton && pixmap()) if (event->button() == Qt::LeftButton && GUIUtil::HasPixmap(this)) {
{
event->accept(); event->accept();
QMimeData *mimeData = new QMimeData; QMimeData *mimeData = new QMimeData;
mimeData->setImageData(exportImage()); mimeData->setImageData(exportImage());
@ -128,7 +125,7 @@ void QRImageWidget::mousePressEvent(QMouseEvent *event)
void QRImageWidget::saveImage() void QRImageWidget::saveImage()
{ {
if(!pixmap()) if (!GUIUtil::HasPixmap(this))
return; return;
QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Image (*.png)"), nullptr); QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Image (*.png)"), nullptr);
if (!fn.isEmpty()) if (!fn.isEmpty())
@ -139,14 +136,14 @@ void QRImageWidget::saveImage()
void QRImageWidget::copyImage() void QRImageWidget::copyImage()
{ {
if(!pixmap()) if (!GUIUtil::HasPixmap(this))
return; return;
QApplication::clipboard()->setImage(exportImage()); QApplication::clipboard()->setImage(exportImage());
} }
void QRImageWidget::contextMenuEvent(QContextMenuEvent *event) void QRImageWidget::contextMenuEvent(QContextMenuEvent *event)
{ {
if(!pixmap()) if (!GUIUtil::HasPixmap(this))
return; return;
contextMenu->exec(event->globalPos()); contextMenu->exec(event->globalPos());
} }

View File

@ -37,6 +37,7 @@
#include <QButtonGroup> #include <QButtonGroup>
#include <QDir> #include <QDir>
#include <QFontDatabase> #include <QFontDatabase>
#include <QDateTime>
#include <QKeyEvent> #include <QKeyEvent>
#include <QMenu> #include <QMenu>
#include <QMessageBox> #include <QMessageBox>
@ -515,7 +516,11 @@ RPCConsole::RPCConsole(interfaces::Node& node, QWidget* parent, Qt::WindowFlags
pageButtons->addButton(ui->btnNetTraffic, pageButtons->buttons().size()); pageButtons->addButton(ui->btnNetTraffic, pageButtons->buttons().size());
pageButtons->addButton(ui->btnPeers, pageButtons->buttons().size()); pageButtons->addButton(ui->btnPeers, pageButtons->buttons().size());
pageButtons->addButton(ui->btnRepair, pageButtons->buttons().size()); pageButtons->addButton(ui->btnRepair, pageButtons->buttons().size());
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
connect(pageButtons, &QButtonGroup::idClicked, this, &RPCConsole::showPage);
#else
connect(pageButtons, QOverload<int>::of(&QButtonGroup::buttonClicked), this, &RPCConsole::showPage); connect(pageButtons, QOverload<int>::of(&QButtonGroup::buttonClicked), this, &RPCConsole::showPage);
#endif
showPage(ToUnderlying(TabTypes::INFO)); showPage(ToUnderlying(TabTypes::INFO));

View File

@ -30,6 +30,7 @@ namespace Ui {
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QButtonGroup; class QButtonGroup;
class QDateTime;
class QMenu; class QMenu;
class QItemSelection; class QItemSelection;
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -205,8 +205,15 @@ void SendCoinsDialog::setModel(WalletModel *_model)
} }
connect(ui->confTargetSelector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::updateSmartFeeLabel); connect(ui->confTargetSelector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::updateSmartFeeLabel);
connect(ui->confTargetSelector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::coinControlUpdateLabels); connect(ui->confTargetSelector, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &SendCoinsDialog::coinControlUpdateLabels);
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
connect(ui->groupFee, &QButtonGroup::idClicked, this, &SendCoinsDialog::updateFeeSectionControls);
connect(ui->groupFee, &QButtonGroup::idClicked, this, &SendCoinsDialog::coinControlUpdateLabels);
#else
connect(ui->groupFee, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this, &SendCoinsDialog::updateFeeSectionControls); connect(ui->groupFee, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this, &SendCoinsDialog::updateFeeSectionControls);
connect(ui->groupFee, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this, &SendCoinsDialog::coinControlUpdateLabels); connect(ui->groupFee, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this, &SendCoinsDialog::coinControlUpdateLabels);
#endif
connect(ui->customFee, &BitcoinAmountField::valueChanged, this, &SendCoinsDialog::coinControlUpdateLabels); connect(ui->customFee, &BitcoinAmountField::valueChanged, this, &SendCoinsDialog::coinControlUpdateLabels);
CAmount requiredFee = model->wallet().getRequiredFee(1000); CAmount requiredFee = model->wallet().getRequiredFee(1000);
ui->customFee->SetMinValue(requiredFee); ui->customFee->SetMinValue(requiredFee);

View File

@ -31,7 +31,11 @@ SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget* parent) :
pageButtons = new QButtonGroup(this); pageButtons = new QButtonGroup(this);
pageButtons->addButton(ui->btnSignMessage, pageButtons->buttons().size()); pageButtons->addButton(ui->btnSignMessage, pageButtons->buttons().size());
pageButtons->addButton(ui->btnVerifyMessage, pageButtons->buttons().size()); pageButtons->addButton(ui->btnVerifyMessage, pageButtons->buttons().size());
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
connect(pageButtons, &QButtonGroup::idClicked, this, &SignVerifyMessageDialog::showPage);
#else
connect(pageButtons, QOverload<int>::of(&QButtonGroup::buttonClicked), this, &SignVerifyMessageDialog::showPage); connect(pageButtons, QOverload<int>::of(&QButtonGroup::buttonClicked), this, &SignVerifyMessageDialog::showPage);
#endif
// These icons are needed on Mac also // These icons are needed on Mac also
GUIUtil::setIcon(ui->addressBookButton_SM, "address-book"); GUIUtil::setIcon(ui->addressBookButton_SM, "address-book");

View File

@ -28,8 +28,8 @@
#include <QScreen> #include <QScreen>
SplashScreen::SplashScreen(interfaces::Node& node, Qt::WindowFlags f, const NetworkStyle *networkStyle) : SplashScreen::SplashScreen(interfaces::Node& node, const NetworkStyle *networkStyle) :
QWidget(nullptr, f), curAlignment(0), m_node(node) QWidget(), curAlignment(0), m_node(node)
{ {
// transparent background // transparent background

View File

@ -28,7 +28,7 @@ class SplashScreen : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit SplashScreen(interfaces::Node& node, Qt::WindowFlags f, const NetworkStyle *networkStyle); explicit SplashScreen(interfaces::Node& node, const NetworkStyle *networkStyle);
~SplashScreen(); ~SplashScreen();
protected: protected:

View File

@ -241,7 +241,7 @@ void TransactionView::setModel(WalletModel *_model)
if (_model->getOptionsModel()) if (_model->getOptionsModel())
{ {
// Add third party transaction URLs to context menu // Add third party transaction URLs to context menu
QStringList listUrls = _model->getOptionsModel()->getThirdPartyTxUrls().split("|", QString::SkipEmptyParts); QStringList listUrls = GUIUtil::SplitSkipEmptyParts(_model->getOptionsModel()->getThirdPartyTxUrls(), "|");
for (int i = 0; i < listUrls.size(); ++i) for (int i = 0; i < listUrls.size(); ++i)
{ {
QString url = listUrls[i].trimmed(); QString url = listUrls[i].trimmed();
@ -289,30 +289,30 @@ void TransactionView::chooseDate(int idx)
break; break;
case Today: case Today:
transactionProxyModel->setDateRange( transactionProxyModel->setDateRange(
QDateTime(current), GUIUtil::StartOfDay(current),
TransactionFilterProxy::MAX_DATE); TransactionFilterProxy::MAX_DATE);
break; break;
case ThisWeek: { case ThisWeek: {
// Find last Monday // Find last Monday
QDate startOfWeek = current.addDays(-(current.dayOfWeek()-1)); QDate startOfWeek = current.addDays(-(current.dayOfWeek()-1));
transactionProxyModel->setDateRange( transactionProxyModel->setDateRange(
QDateTime(startOfWeek), GUIUtil::StartOfDay(startOfWeek),
TransactionFilterProxy::MAX_DATE); TransactionFilterProxy::MAX_DATE);
} break; } break;
case ThisMonth: case ThisMonth:
transactionProxyModel->setDateRange( transactionProxyModel->setDateRange(
QDateTime(QDate(current.year(), current.month(), 1)), GUIUtil::StartOfDay(QDate(current.year(), current.month(), 1)),
TransactionFilterProxy::MAX_DATE); TransactionFilterProxy::MAX_DATE);
break; break;
case LastMonth: case LastMonth:
transactionProxyModel->setDateRange( transactionProxyModel->setDateRange(
QDateTime(QDate(current.year(), current.month(), 1).addMonths(-1)), GUIUtil::StartOfDay(QDate(current.year(), current.month(), 1).addMonths(-1)),
QDateTime(QDate(current.year(), current.month(), 1))); GUIUtil::StartOfDay(QDate(current.year(), current.month(), 1)));
break; break;
case ThisYear: case ThisYear:
transactionProxyModel->setDateRange( transactionProxyModel->setDateRange(
QDateTime(QDate(current.year(), 1, 1)), GUIUtil::StartOfDay(QDate(current.year(), 1, 1)),
TransactionFilterProxy::MAX_DATE); TransactionFilterProxy::MAX_DATE);
break; break;
case Range: case Range:
@ -666,8 +666,8 @@ void TransactionView::dateRangeChanged()
settings.setValue("transactionDateTo", dateTo->date().toString(PERSISTENCE_DATE_FORMAT)); settings.setValue("transactionDateTo", dateTo->date().toString(PERSISTENCE_DATE_FORMAT));
transactionProxyModel->setDateRange( transactionProxyModel->setDateRange(
QDateTime(dateFrom->date()), GUIUtil::StartOfDay(dateFrom->date()),
QDateTime(dateTo->date())); GUIUtil::StartOfDay(dateTo->date()));
} }
void TransactionView::focusTransaction(const QModelIndex &idx) void TransactionView::focusTransaction(const QModelIndex &idx)