[Development] Updating holdover API from Qt 1 times

Sze Howe Koh szehowe.koh at gmail.com
Sat Aug 17 06:13:14 CEST 2019

 QLabel returns some CoW types by-pointer as a legacy from Qt 1 times [1]:

    QPixmap *QLabel::pixmap() const;
    QPixture *QLabel::pixmap() const;

If you know of any other such API, please point them out!

Anyway, a few different ways have been proposed to modernize this API
[2][3][4], summarized below:

1) Add a non-overloaded version and deprecate the existing version:

    class QLabel {
        QPixmap *pixmap() const; // deprecated
        QPixmap labelPixmap() const; // new

2) Keep the existing name but change the return type, with support for a
transition period:

    namespace Qt {
        struct ReturnByValue_t {};
        static Q_CONSTEXPR ReturnByValue_t ReturnByValue;

    class QLabel {
        QPixmap *pixmap() const; // deprecated
        QPixmap pixmap(Qt::ReturnByValue_t) const; // new

class QLabel {
    QPixmap *pixmap() const;
    QPixmap pixmap(Qt::ReturnByValue_t
            = ReturnByValue
    ) const;

QPixmap *pm1 = label->pixmap();
QPixmap pm2 = label->pixmap(Qt::ReturnByValue);

QPixmap pm3 = label->pixmap();

3) Pick one of the options above, but go one step further and use
std::optional (C++17) instead of returning null objects. I imagine this
should apply more broadly to the whole of Qt, not just the functions
discussed here.

There's also Option (4): Leave it all alone; if it ain't broke don't fix it.

Which should we implement? I personally prefer (2) as it it can be added to
Qt 5.x and provides backward compatibility while keeping the nice compact
function names. We could enable QT_NO_COW by default in Qt 6.5 LTS and then
remove the old function and Qt::ReturnByValue_t in Qt 7.0.

I'm not sure I like the verbosity or SiC-ness of std::optional, hence I'm
asking for thoughts here.


[3] https://codereview.qt-project.org/c/qt/qtbase/+/101233
[4] https://codereview.qt-project.org/c/qt/qtbase/+/267825
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20190817/76d8105a/attachment.html>

More information about the Development mailing list