Fixing “qmlscene can’t find Qt installation” even with qtchooser versions listed

Experiencing the frustrating error “qmlscene: could not find a Qt installation” even after verifying that qtchooser lists available Qt versions is a common issue, particularly on Linux systems. This article provides a comprehensive guide to diagnose and resolve this problem, enabling you to seamlessly run your QML applications. We will explore various causes, from incorrect environment variables to misconfigured Qt installations, and offer step-by-step solutions tailored for different scenarios.

Understanding the Problem: Why qmlscene Fails to Locate Qt

The error message indicates that qmlscene cannot find a suitable Qt installation to use. While qtchooser correctly identifies installed Qt versions, several factors can prevent qmlscene from accessing them. These include:

  • Incorrect or Missing Environment Variables: qmlscene relies on environment variables like QT_SELECT, QTDIR, QT_QPA_PLATFORM_PLUGIN_PATH and LD_LIBRARY_PATH to locate the necessary Qt libraries and plugins. If these variables are not properly set or point to incorrect locations, qmlscene will fail to find the Qt installation.

  • Conflicting Qt Versions: Multiple Qt versions installed on the system can lead to conflicts if qmlscene tries to use the wrong version. The system may try to default to QT4, although you specifically call QT5.

  • Incomplete Qt Installation: A partially installed or corrupted Qt installation can cause qmlscene to fail. This might involve missing libraries, plugins, or incorrect file permissions.

  • Permissions Issues: Insufficient permissions to access Qt libraries or plugin directories can also trigger the error.

  • qtchooser Misconfiguration: While qtchooser lists available versions, it might not be correctly configured as the default selection, or the profiles might be inconsistent.

Troubleshooting Steps: Diagnosing the Root Cause

Before attempting any solutions, it’s crucial to identify the underlying cause. The following steps will help you pinpoint the issue:

  1. Verify qtchooser Configuration:

    • Check the default Qt version: Run qtchooser -print-env to see the currently selected Qt version and associated environment variables. This will reveal if qtchooser is properly configured to use the desired Qt version. If QT_SELECT is not set, you can try setting it: export QT_SELECT=qt5.
    • Examine qtchooser profiles: The qtchooser tool relies on configuration files in /etc/qt5/qtchooser (system-wide) and ~/.config/qtchooser (user-specific). Examine these files to ensure they correctly define the paths to your Qt installations. Specifically, check the <qt_version>.conf files for the Qt versions listed by qtchooser -list-versions. Make sure that the paths specified in these files are accurate and point to the correct Qt installation directories.
    • Profile Consistency: Ensure that the profiles listed by qtchooser -list-versions actually exist and are correctly configured. Inconsistent profiles can lead to qmlscene failing to find the specified Qt installation. The format is as follows:
/usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf

/usr/lib/x86_64-linux-gnu/qt5/qtchooser/qt5.conf
  1. Inspect Environment Variables:

    • Check QTDIR: The QTDIR environment variable should point to the root directory of the Qt installation you want to use. For example, if Qt 5 is installed in /opt/Qt/5.15.2/gcc_64, then QTDIR should be set to this path.
    • Examine LD_LIBRARY_PATH: This variable tells the system where to look for shared libraries. Ensure that it includes the lib directory of your Qt installation (e.g., /opt/Qt/5.15.2/gcc_64/lib). If LD_LIBRARY_PATH is not correctly set, qmlscene will not be able to find the necessary Qt libraries.
    • Verify QT_QPA_PLATFORM_PLUGIN_PATH: This variable specifies the location of Qt platform plugins, which are essential for rendering the user interface. This path should point to <Qt installation directory>/plugins/platforms (e.g., /opt/Qt/5.15.2/gcc_64/plugins/platforms).
    • Print Environment Variables: Use env | grep QT and env | grep LD_LIBRARY_PATH to view the current values of these variables and identify any discrepancies or omissions.
  2. Test with a Specific Qt Version:

    • Use the -qt option of qmlscene to explicitly specify the Qt version to use. For example:
qmlscene -qt=qt5 main.qml
*   If this works, it suggests that the default Qt version is not correctly configured or that there is a conflict between different Qt versions.  If this returns "QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-revwhiteshadow'" this could indicate a need to set XDG_RUNTIME_DIR.
  1. Check Qt Installation Integrity:

    • Verify Library Files: Browse the Qt installation directory to ensure that the necessary library files (e.g., libQt5Core.so, libQt5Gui.so, libQt5Qml.so) are present.
    • Check Plugin Directory: Verify that the plugins directory contains the required platform plugins (e.g., libqxcb.so for X11).
    • Run Qt Examples: Try running some of the example applications that come with the Qt installation to ensure that the installation is working correctly. These are usually located in the “examples” directory within the Qt installation directory. If the examples also fail, it could indicate a more serious problem with the installation.
  2. Investigate Permissions Issues:

    • Check File Permissions: Ensure that the user running qmlscene has read and execute permissions for the Qt libraries, plugins, and other relevant files. Use ls -l to examine the file permissions.
    • Run qmlscene as Root (Temporary Test): As a temporary test, try running qmlscene with sudo (e.g., sudo qmlscene main.qml). If this works, it indicates a permissions issue. However, running GUI applications with sudo is generally not recommended.

Solutions: Resolving the “qmlscene can’t find Qt installation” Error

Once you have identified the cause of the problem, you can apply the appropriate solution. Here are several common solutions, ranked in order of complexity:

  1. Setting Environment Variables Correctly:

    • Temporary Solution (for the current shell session):
export QT_SELECT=qt5
export QTDIR=/opt/Qt/5.15.2/gcc_64  # Replace with your Qt installation path
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/platforms
*   **Permanent Solution (recommended):** Add the above lines to your shell configuration file (e.g., `~/.bashrc`, `~/.zshrc`). This will ensure that the environment variables are set every time you open a new terminal. Remember to source the file after making changes (e.g., `source ~/.bashrc`).
*   **Using qtchooser to Set Variables:** If `qtchooser` is properly configured, you can use it to set the environment variables:
eval $(qtchooser -print-env -qt=qt5)
  1. Adjusting qtchooser Configuration:

    • Set the Default Qt Version: Use the qtchooser -set-qt5 command to set Qt 5 as the default version. This command updates the qtchooser configuration files to point to Qt 5.
    • Create or Modify qtchooser Profiles: If the profiles listed by qtchooser -list-versions are incorrect or missing, you can create or modify them. Create a new .conf file in /etc/qt5/qtchooser or ~/.config/qtchooser with the following format:
/path/to/qt/installation/bin
/path/to/qt/installation/lib
Replace `/path/to/qt/installation` with the actual path to your Qt installation.
  1. Resolving Conflicting Qt Versions:

    • Unset Conflicting Variables: If you have environment variables set for a different Qt version (e.g., Qt 4), unset them to avoid conflicts:
unset QT4DIR
unset LD_LIBRARY_PATH_QT4
*   **Specify Qt Version with qmlscene:** Always use the `-qt` option with `qmlscene` to explicitly specify the Qt version to use.
  1. Reinstalling Qt:

    • If you suspect that your Qt installation is corrupted or incomplete, reinstall it. Use the official Qt installer to ensure that all necessary components are installed correctly. Make sure you have sufficient storage space for the whole installation, which may exceed 10GB for all components.
  2. Addressing Permissions Issues:

    • Change File Permissions (Use with Caution): If you identify specific files or directories with incorrect permissions, you can use the chmod command to change them. For example:
sudo chmod +x /opt/Qt/5.15.2/gcc_64/bin/qmlscene
sudo chmod -R a+r /opt/Qt/5.15.2/gcc_64/lib
However, be very careful when changing file permissions, as it can have unintended consequences. Do this only if you are certain that it is necessary.
  1. Verifying XDG_RUNTIME_DIR

    • The error “QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-revwhiteshadow’” could indicate a missing or misconfigured XDG_RUNTIME_DIR environment variable. This variable is used to specify the location of a user-specific directory for runtime files.
    • Setting XDG_RUNTIME_DIR: You can set this variable temporarily or permanently.
      • Temporary Solution: export XDG_RUNTIME_DIR=/run/user/$UID
      • Permanent Solution: Add the above line to your shell configuration file (~/.bashrc, ~/.zshrc).

Advanced Troubleshooting: Deeper Dive into Potential Issues

If the above solutions don’t resolve the problem, consider these more advanced troubleshooting steps:

  • Check for Symbolic Links: Ensure that symbolic links in the Qt installation directory are correctly pointing to the actual files. Broken symbolic links can cause qmlscene to fail to find the necessary libraries.
  • Examine qmlscene Dependencies: Use the ldd command to list the dependencies of qmlscene and verify that all dependencies are satisfied:
ldd /opt/Qt/5.15.2/gcc_64/bin/qmlscene
If any dependencies are missing or unresolved, it could indicate a problem with the Qt installation or the system's library configuration.
  • Use strace to Trace System Calls: The strace command can be used to trace the system calls made by qmlscene. This can provide valuable information about where qmlscene is looking for Qt libraries and plugins and why it is failing.
    • Example: strace qmlscene main.qml 2>&1 | grep "qt"
  • Investigate AppArmor or SELinux: Security policies like AppArmor or SELinux might be preventing qmlscene from accessing the Qt installation. Check the system logs for any AppArmor or SELinux denials related to qmlscene.

Conclusion: Ensuring qmlscene Finds Your Qt Installation

The “qmlscene: could not find a Qt installation” error can be frustrating, but by systematically troubleshooting and applying the appropriate solutions, you can resolve the issue and get your QML applications running smoothly. Remember to verify your qtchooser configuration, check your environment variables, ensure the integrity of your Qt installation, and address any potential permissions issues. By carefully following the steps outlined in this article, you can overcome this hurdle and continue developing and deploying your Qt-based applications. By understanding what configuration is missing, you can make sure you’re not missing something simple, and resolve it using the methods we provided. Our extensive guide should give you a good overview, if these steps are followed in order, we believe this will resolve all problems related to qmlscene.