[libcamera-devel] [PATCH] qcam: fix Qt5.15.0 compile

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Jun 8 23:32:32 CEST 2020


Hi Peter,

On Mon, Jun 08, 2020 at 11:11:02PM +0200, Peter Seiderer wrote:
> On Mon, 8 Jun 2020 04:18:56 +0300, Laurent Pinchart <laurent.pinchart at ideasonboard.com> wrote:
> > On Sun, Jun 07, 2020 at 11:58:26PM +0200, Peter Seiderer wrote:
> >> On Sun, 7 Jun 2020 20:17:29 +0300, Laurent Pinchart <laurent.pinchart at ideasonboard.com> wrote:  
> >>> On Sun, Jun 07, 2020 at 06:56:55PM +0200, Peter Seiderer wrote:  
> >>>> Fixes:
> >>>> 
> >>>>   ../src/qcam/main_window.cpp:634:16: error: ‘QTextStream& QTextStreamFunctions::fixed(QTextStream&)’ is deprecated: Use Qt::fixed [-Werror=deprecated-declarations]
> >>>>     634 |   << "fps:" << fixed << qSetRealNumberPrecision(2) << fps;
> >>>>         |                ^~~~~
> >>>> Signed-off-by: Peter Seiderer <ps.report at gmx.net>
> >>>> ---
> >>>>  src/qcam/main_window.cpp | 2 +-
> >>>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>> 
> >>>> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> >>>> index 7de0895..1f3bdc1 100644
> >>>> --- a/src/qcam/main_window.cpp
> >>>> +++ b/src/qcam/main_window.cpp
> >>>> @@ -631,7 +631,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)
> >>>>  		<< QString("seq: %1").arg(metadata.sequence, 6, 10, QLatin1Char('0'))
> >>>>  		<< "bytesused:" << metadata.planes[0].bytesused
> >>>>  		<< "timestamp:" << metadata.timestamp
> >>>> -		<< "fps:" << fixed << qSetRealNumberPrecision(2) << fps;
> >>>> +		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;    
> >>> 
> >>> Hasn't Qt::fixed been introduced in Qt v5.14, wouldn't this break
> >>> compatibility with all older Qt versions ?  
> >> 
> >> Yes, you are right...
> >>   
> >>> One option I haven't tested would be to keep Qt::fixed here, and add, at
> >>> the top of this file, something along those lines.
> >>> 
> >>> #if QT_VERSION <= QT_VERSION_CHECK(5, 14, 0)
> >>> /*
> >>>  * Qt::fixed was introduced in v5.14, and ::fixed deprecated in v5.15. Allow
> >>>  * usage of Qt::fixed unconditionally.
> >>>  */
> >>> namespace Qt {
> >>> using fixed = ::fixed;
> >>> } /* namespace Qt */
> >>> #endif
> >>> 
> >>> Would you be able to test this ?  
> >> 
> >> Did try with Qt5.10.1 (with a standalone test program), leads to:
> >> 
> >>   test-qt-fixed.cpp:10:17: error: ‘fixed’ in namespace ‘::’ does not name a type
> >>      10 | using fixed = ::fixed;
> >>         |                 ^~~~~
> >> 
> >> 
> >> Alternative would be:
> >> 
> >> [...]
> >> #if QT_VERSION <= QT_VERSION_CHECK(5, 14, 0)
> >> 	<< fixed
> >> #else
> >> 	<< Qt::fixed
> >> #endif
> >> [...]  
> > 
> > That would require an #if for every usage of fixed, which isn't very
> > nice (even if we use it in a single place only). I've tested the
> > following v5.14 but can't easily test on older Qt versions. Could you
> > test v5.10 ?
> 
> Yes, can do...
> 
> > #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
> > /*
> >  * Qt::fixed was introduced in v5.14, and ::fixed deprecated in v5.15. Allow
> >  * usage of Qt::fixed unconditionally.
> >  */
> > namespace Qt {
> > constexpr auto fixed = ::fixed;
> > } /* namespace Qt */
> > #endif
> 
> This one works with Qt5.10.1...

Great ! Thank you for testing.

Are you fine with the following patch ? If so there's no need to send a
new version.

commit 3dd6902e12c73cdcb5ef1a0ce0aceee5c9008306
Author: Peter Seiderer <ps.report at gmx.net>
Date:   Sun Jun 7 18:56:55 2020 +0200

    qcam: Fix compilation with Qt v5.15.0
    
    Starting from Qt v5.15.0, the QTextStreamFunctions::fixed function
    used to configure formatting on QTextStream is deprecated in favour of
    Qt::fixed. This causes a compilation error:
    
      ../src/qcam/main_window.cpp:634:16: error: ‘QTextStream& QTextStreamFunctions::fixed(QTextStream&)’ is deprecated: Use Qt::fixed [-Werror=deprecated-declarations]
        634 |   << "fps:" << fixed << qSetRealNumberPrecision(2) << fps;
            |                ^~~~~
    
    Fix it by using Qt::fixed, and provide backward compatibility with Qt
    versions older than v5.14.0 that didn't provide Qt::fixed.
    
    Signed-off-by: Peter Seiderer <ps.report at gmx.net>
    Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
    Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 7de089571234..2960259f4213 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -31,6 +31,16 @@
 
 using namespace libcamera;
 
+#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
+/*
+ * Qt::fixed was introduced in v5.14, and ::fixed deprecated in v5.15. Allow
+ * usage of Qt::fixed unconditionally.
+ */
+namespace Qt {
+constexpr auto fixed = ::fixed;
+} /* namespace Qt */
+#endif
+
 /**
  * \brief Custom QEvent to signal capture completion
  */
@@ -631,7 +641,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)
 		<< QString("seq: %1").arg(metadata.sequence, 6, 10, QLatin1Char('0'))
 		<< "bytesused:" << metadata.planes[0].bytesused
 		<< "timestamp:" << metadata.timestamp
-		<< "fps:" << fixed << qSetRealNumberPrecision(2) << fps;
+		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
 
 	/* Render the frame on the viewfinder. */
 	viewfinder_->render(buffer, &mappedBuffers_[buffer]);


> >> Should I re-spin the patch?
> >>   
> >>>>  
> >>>>  	/* Render the frame on the viewfinder. */
> >>>>  	viewfinder_->render(buffer, &mappedBuffers_[buffer]);    

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list