wangwenx190 / framelesshelper

Project moved to: https://github.com/stdware/qwindowkit Cross-platform window customization framework for Qt Widgets and Qt Quick. Supports Windows, Linux and macOS.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

linux-Qt6.5下编译错误

czyt1988 opened this issue · comments

commented

[ 83%] Building CXX object src/SARibbonBar/CMakeFiles/SARibbonBar.dir/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp.o
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:301:10: error: ambiguating new declaration of ‘QString gtkSettings(const gchar*)’
301 | Type gtkSettings(const gchar property)
| ^~~~~~~~~~~
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:477:1: note: in expansion of macro ‘GTKSETTINGS_IMPL’
477 | GTKSETTINGS_IMPL(QString, const QString result = QUtf8String(g_value_get_string(&value));)
| ^~~~~~~~~~~~~~~~
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:301:10: note: old declaration ‘bool gtkSettings(const gchar
)’
301 | Type gtkSettings(const gchar property)
| ^~~~~~~~~~~
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:476:1: note: in expansion of macro ‘GTKSETTINGS_IMPL’
476 | GTKSETTINGS_IMPL(bool, const bool result = g_value_get_boolean(&value);)
| ^~~~~~~~~~~~~~~~
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp: In instantiation of ‘T wangwenx190::FramelessHelper::gtkSettings(const gchar
) [with T = bool; gchar = char]’:
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:499:46: required from here
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:495:17: error: ‘g_object_get’ was not declared in this scope; did you mean ‘g_object_unref’?
495 | g_object_get(settings, property, &result, nullptr);
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| g_object_unref
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp: In instantiation of ‘T wangwenx190::FramelessHelper::gtkSettings(const gchar*) [with T = char*; gchar = char]’:
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:508:45: required from here
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:495:17: error: ‘g_object_get’ was not declared in this scope; did you mean ‘g_object_unref’?
495 | g_object_get(settings, property, &result, nullptr);
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| g_object_unref
gmake[2]: *** [src/SARibbonBar/CMakeFiles/SARibbonBar.dir/build.make:832: src/SARibbonBar/CMakeFiles/SARibbonBar.dir/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp.o] Error 1

需要安装 libxcb1-dev libgtk-3-dev

commented

安装后可以编译了,但遇到了一个断言,位于:

src/core/utils_linux.cpp line 613

我看了一下源码,这个断言是xcb_atom_t Utils::internAtom(const char *name)函数中的Q_ASSERT(connection);

xcb_atom_t Utils::internAtom(const char *name)
{
    Q_ASSERT(name);
    Q_ASSERT(*name != '\0');
    if (!name || (*name == '\0')) {
        return XCB_NONE;
    }
    xcb_connection_t * const connection = x11_connection();
    Q_ASSERT(connection);
    if (!connection) {
        return XCB_NONE;
    }
    const xcb_intern_atom_cookie_t cookie = xcb_intern_atom(connection, false, qstrlen(name), name);
    xcb_intern_atom_reply_t * const reply = xcb_intern_atom_reply(connection, cookie, nullptr);
    if (!reply) {
        return XCB_NONE;
    }
    const xcb_atom_t atom = reply->atom;
    std::free(reply);
    return atom;
}

在断言后还进行了判断,并在空的时候返回XCB_NONE,此断言是否有必要?

    xcb_connection_t * const connection = x11_connection();
    Q_ASSERT(connection);
    if (!connection) {
        return XCB_NONE;
    }

你可以暂时注释掉。此断言可能无必要,只是我不知道connection为空是否为常规现象