LBEM-CH / focus

High Throughput Electron Microscopy Image Processing Software
http://www.focus-em.org
GNU General Public License v2.0
35 stars 14 forks source link

Compile error: error: ‘NoCancelButtonOnLastPage’ is not a member of ‘QWizard’ #180

Closed PaulVanSchayck closed 7 years ago

PaulVanSchayck commented 7 years ago

On Ubuntu 14.04, using Qt 5.2.1 I get the following compile error:

[ 94%] Building CXX object apps/focus/CMakeFiles/focus.dir/main.cpp.o
In file included from /home/local/focus/apps/focus/main.cpp:29:0:
/home/local/focus/apps/focus/StartupWizard.h: In constructor ‘StartupWizard::StartupWizard(QWidget*)’:
/home/local/focus/apps/focus/StartupWizard.h:33:19: error: ‘NoCancelButtonOnLastPage’ is not a member of ‘QWizard’
         setOption(QWizard::NoCancelButtonOnLastPage, true);
                   ^
make[2]: *** [apps/focus/CMakeFiles/focus.dir/main.cpp.o] Error 1
make[1]: *** [apps/focus/CMakeFiles/focus.dir/all] Error 2
make: *** [all] Error 2

I could fix this by simply removing the setOption line in question from StartupWizard.h:33. Compilation finished without issue after that.

nikhilbiyani commented 7 years ago

We have tried compiling on Ubuntu using Qt 5.5 - 5.8 (downloaded from Qt5 website) without any problems. Where did you install qt from? There might be problems with the apt-get version. We know of some issues with it before.

PaulVanSchayck commented 7 years ago

This is the stock Qt 5.2.1 from Ubuntu 14.04.2 LTS. http://packages.ubuntu.com/trusty/qt5-default

I would rather not have to change the system wide Qt version without a strong reason. I would expect I'm not the only sys admin in that.

nikhilbiyani commented 7 years ago

You can install qt5 somewhere on your home folder, make sure that command qmake on terminal points to the one you installed, remove the focus build directory used to store cache files of cmake and run the ./build_all script again from the focus source code. This will make sure that qt libs being used are from the one you use with qmake. We cannot delete this option you specified from focus, as it is critical and may cause unexpected behaviour on clicking cancel button.

PaulVanSchayck commented 7 years ago

Sure that would be a possible workaround. It's a lot of effort though for a potential developer/user of Focus to go through. I would strongly argue against taking such an approach. Apart from the extra work, I also have some technical reasons:

  1. You are at the moment copying over the Qt dependencies at build time to the lib/ directory. And then setting LD_LIBRARY_PATH at run time. I believe you're a missing a few dependencies. The binary .dep packages that are on the website do not work for me because they are mixing system and included libraries. Also the paths for LD_LIBRARY_PATH are appended at the end, instead of in front. I can report these in more detail as separate bugs.

  2. The Qt libraries are linked against other system libraries, for example, libxcd. At some point you may get into trouble by using the system libxcd which will be different then the one you compiled against.

  3. While I understand that this NoCancelButtonOnLastPage is important to have. You could work around it in other ways. Or use #ifdef's around it. It's only this very minor issue that prevents compilation against Qt 5.2.1.

In short, I believe your users, developers and sys admins will love you if you play nice with system libraries. It saves time and trouble on their side. I think your reasons for using your own versions are not weighting against the benefits.

If you don't agree, then I guess the only fix necessary from this bug report is that your CMAKE files check for Qt 5.5 or higher as dependency. At the moment they check for 5.x.x and this is not stringent enough.

nikhilbiyani commented 7 years ago

Thanks for the comments. We will look what we can do! When focus is built from source, there are no issues! The system administrators and developers are recommended this method. We are aware of the situation with packages and is a bit more complex!

Regarding this issue: The option NoCancelButtonOnLastPage was introduced in Qt 4.3 and exists since then. I just downloaded the source code of Qt 5.2.1 from:

https://www.qt.io/download-open-source/

and double checked that this options exists in the header files. We cannot test the build against all the qt libs available and rely on the libraries downloaded from official qt website! I'm sorry about it but in such cases you have to do as proposed in the earlier message.

I am closing this issue now, please feel free to reopen it for further questions.