@0xd34df00d

Тег qt в блоге 0xd34df00d

0xd34df00d

moc под докером почему-то не может в простейший проект ( https://bpaste.net/show/a3b8682da0c7 ), ругаясь

/usr/lib64/qt5/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/lib64/qt5/mkspecs/linux-g++ -I./sub -I/usr/include/qt5 -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I/usr/include/c++/7 -I/usr/include/c++/7/x86_64-suse-linux -I/usr/include/c++/7/backward -I/usr/lib64/gcc/x86_64-suse-linux/7/include -I/usr/local/include -I/usr/lib64/gcc/x86_64-suse-linux/7/include-fixed -I/usr/x86_64-suse-linux/include -I/usr/include obj.h -o moc_obj.cpp
obj.h:9: Error: Undefined interface

На домашней машине всё в порядке.

Технологии 2018-го года.

#mxwkt
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Конец эпохи:

Nico-izo, что думаешь?

#ozram 1
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Перенос слов ебанулся и испытывает НЕЛОКАЛЬНОСТЬ:

#ozmlx 3
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Замена старого стиля соединения сигналов-слотов на новый с лямбдочками и указателями на функции-члены с последующим удалением макроса Q_OBJECT и сгенерированной им требухи убирает 5 килобайт из дебаг-символов на каждый класс (после стрипа разницы никакой, впрочем).

#owxek
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

У кутешного QFuture<T> есть оператор приведения к T, отчего рассчитывать на тайпчекер при рефакторинге кода нельзя.

Плохо зделоли.

#ojegb 2
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

За неделю аптайма личкрафтов Qt мне насоздавало несколько тысяч тредов вроде

  7047 Thread 0x7fdc4a47a700 (LWP 2696) "Qt HTTP synchro" 0x00007ffff40b114d in poll () from /lib64/libc.so.6
  7048 Thread 0x7fdc49c79700 (LWP 2697) "Qt HTTP synchro" 0x00007ffff40b114d in poll () from /lib64/libc.so.6
  7049 Thread 0x7fdc49478700 (LWP 2698) "Qt HTTP synchro" 0x00007ffff40b114d in poll () from /lib64/libc.so.6
  7050 Thread 0x7fdc48c77700 (LWP 2699) "Qt HTTP synchro" 0x00007ffff40b114d in poll () from /lib64/libc.so.6
  7051 Thread 0x7fdc48476700 (LWP 2700) "Qt HTTP synchro" 0x00007ffff40b114d in poll () from /lib64/libc.so.6

TWT, ты хорошо гуглишь, погугли, чо это за хуйня и как починить, а?

#ojedu 2
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

По какой-то неведомой причине QString::arg, возвращающий строку, в которой маркеры вроде %1 заменены на строковое представление аргумента, не имеет перегрузки, принимающей QStringRef (это как std::string_view, только Qt).

Плохо зделоли.

#ojtdt
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

По запросу Коленки возобновляю публикацию новостей из первотега. Адово улучшил поддержку djvu-документов, например, ускорив рендеринг страниц на порядок (не перерендеривая каждую страницу на каждый эвент от обновлении страницы от libdjvu) и сделав его асинхронным и многопоточным.

Пользуясь случаем, в очередной раз отмечу, что API QtConcurrent — говняный немножко. mapped-функтор обязан быть std::function или свободной функцией, иначе оно возвращаемый тип вывести не может. reduced-функтор обязан быть только свободной функцией, иначе тоже с выводом типов проблемы у кутей.

Завезите им там кто-нибудь шаблонных метапрограммистов плз.

#okmjh
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Написал в хедере namespace LeechCraft::Azoth::Sarin {}
@
Уронил moc:

/home/d34df00d/Programming/leechcraft/src/plugins/azoth/plugins/sarin/toxthread.h:46: Parse error at "LeechCraft"
AutoMoc: Error: moc process for leechcraft_azoth_sarin_autogen/EWIEGA46WW/moc_toxthread.cpp failed:
/home/d34df00d/Programming/leechcraft/src/plugins/azoth/plugins/sarin/toxthread.h:46: Parse error at "LeechCraft"

К C++17 готово!

#okyvy
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Билд личкрафтов с qt4: 6 минут 15 секунд. На той же машине с даже чуть меньшим набором плагинов билд с qt5: 7 минут 55 секунд.

#owuxw 1
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

В QML Charts нельзя привязать свойство, возвращающее список точек, к вьюшке точек. Только по одной точке добавлять.

Пиздец.

#ojzeb
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Собственная реализация инверсии пикселей картинки

const auto height = image.height ();
const auto width = image.width ();
const auto bits = reinterpret_cast<QRgb*> (image.scanLine (0));
for (int i = 0; i < width * height; ++i)
    bits [i] ^= 0x00ffffff;

в полтора раза быстрее штатного QImage::invertPixels() — 3.0 мс на картинке 3840×2160 против 4.7 мс соответственно.

Лолирую чо-т.

#ozdiv 37
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

To communicate with a QWebChannel or WebChannel, a client must use and set up the JavaScript API provided by qwebchannel.js. For clients run inside Qt WebEngine, you can load the file via qrc:///qtwebchannel/qwebchannel.js.
Refused to load the script 'qrc:///qtwebchannel/qwebchannel.js' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-inline' 'unsafe-eval'

Заебись.

#okvoc 9
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

А, не, это не жирная обезьяна сломалась в личкрафтах с новым релизом кутей, это просто вебкит дерьмо и валится вот на таком юзерскрипте при заходе, скажем, на lostfilm.tv, если упрощать:

(function() {
        function handleUnreachableCSS(cssAddress) {
                        var xhttp = new XMLHttpRequest();
                        xhttp.open("GET", cssAddress, true);
                        xhttp.send();
        }

        var fixCSS = function() {
                for (var i = 0; i < document.styleSheets.length; ++i) {
                        var cssObj = document.styleSheets[i];
                        var rules = cssObj.cssRules;
                        if (typeof rules === "undefined" || rules === null)
                                handleUnreachableCSS(cssObj.href);
                }
        }

        fixCSS();
        window.addEventListener("load", fixCSS, false);
})();
#owbsp 3
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Кто бы знал, как я люблю такие сигнатуры и пояснения в 2016 году:

QWebEnginePage::QWebEnginePage(QWebEngineProfile *profile, QObject *parent = Q_NULLPTR)

Constructs an empty web engine page in the web engine profile profile with the parent parent.

If the profile is not the default profile, the caller must ensure that the profile stays alive for as long as the page does.
#oozxqk 2
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Впилил хром^W webengine в личкрафты:


Поддержка стандартов, отзывчивость и жор памяти прилагаются.

Поддержка WebKit'а сохранилась. Теоретически можно сделать так, что часть страниц будет открываться вебкитом, часть — webengine'ом. Не знаю, правда, кто этим заниматься будет, в смысле, логикой по разруливанию, что чем открывать.

#oownfm 2
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Запустил короч QWebEngine под ASAN, а оно мне сразу:

==21489==ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed: 0x000001ae1010 in thread T0 (leechcraft-qt5)
    #0 0x4ffa20 in free (/usr/local/bin/leechcraft-qt5+0x4ffa20)
    #1 0x7f81920991a9  (/usr/lib64/libQt5WebEngineCore.so.5+0xc611a9)
    #2 0x7f81920991e8  (/usr/lib64/libQt5WebEngineCore.so.5+0xc611e8)
    #3 0x7f819209654a  (/usr/lib64/libQt5WebEngineCore.so.5+0xc5e54a)
    #4 0x7f81926dd07b  (/usr/lib64/libQt5WebEngineCore.so.5+0x12a507b)
    #5 0x7f81926d3f76  (/usr/lib64/libQt5WebEngineCore.so.5+0x129bf76)
    #6 0x7f81926d37af  (/usr/lib64/libQt5WebEngineCore.so.5+0x129b7af)
    #7 0x7f819395c025  (/usr/lib64/libQt5WebEngineCore.so.5+0x2524025)
    #8 0x7f819234d920  (/usr/lib64/libQt5WebEngineCore.so.5+0xf15920)
    #9 0x7f819395ae5d  (/usr/lib64/libQt5WebEngineCore.so.5+0x2522e5d)
    #10 0x7f819234d1ef  (/usr/lib64/libQt5WebEngineCore.so.5+0xf151ef)
    #11 0x7f819234c686  (/usr/lib64/libQt5WebEngineCore.so.5+0xf14686)
    #12 0x7f819234c79a  (/usr/lib64/libQt5WebEngineCore.so.5+0xf1479a)
    #13 0x7f819234c80a  (/usr/lib64/libQt5WebEngineCore.so.5+0xf1480a)
    #14 0x7f819404d0b8  (/usr/lib64/libQt5WebEngineCore.so.5+0x2c150b8)
    #15 0x7f819404c620  (/usr/lib64/libQt5WebEngineCore.so.5+0x2c14620)
    #16 0x7f81932a4182  (/usr/lib64/libQt5WebEngineCore.so.5+0x1e6c182)
    #17 0x7f819324e9f5  (/usr/lib64/libQt5WebEngineCore.so.5+0x1e169f5)
    #18 0x7f819324ede0  (/usr/lib64/libQt5WebEngineCore.so.5+0x1e16de0)
    #19 0x7f819324fa9a  (/usr/lib64/libQt5WebEngineCore.so.5+0x1e17a9a)
    #20 0x7f8191a5be02  (/usr/lib64/libQt5WebEngineCore.so.5+0x623e02)
    #21 0x7f81be49b14a in QObject::event(QEvent*) (/usr/lib64/libQt5Core.so.5+0x27414a)
    #22 0x7f81becbd74b in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib64/libQt5Widgets.so.5+0x15b74b)
    #23 0x7f81becc4c2f in QApplication::notify(QObject*, QEvent*) (/usr/lib64/libQt5Widgets.so.5+0x162c2f)
    #24 0x5eaf5c in LeechCraft::Application::notify(QObject*, QEvent*) /home/d34df00d/Programming/leechcraft/src/core/application.cpp:348:25
    #25 0x7f81be473cdf in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib64/libQt5Core.so.5+0x24ccdf)
    #26 0x7f81be476062 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (/usr/lib64/libQt5Core.so.5+0x24f062)
    #27 0x7f81be4bf0b2  (/usr/lib64/libQt5Core.so.5+0x2980b2)
    #28 0x7f81ba546d1c in g_main_context_dispatch (/usr/lib64/libglib-2.0.so.0+0x49d1c)
    #29 0x7f81ba546fff  (/usr/lib64/libglib-2.0.so.0+0x49fff)
    #30 0x7f81ba5470ab in g_main_context_iteration (/usr/lib64/libglib-2.0.so.0+0x4a0ab)
    #31 0x7f81be4bf126 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib64/libQt5Core.so.5+0x298126)
    #32 0x7f81be4729b9 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib64/libQt5Core.so.5+0x24b9b9)
    #33 0x7f81be47a4eb in QCoreApplication::exec() (/usr/lib64/libQt5Core.so.5+0x2534eb)
    #34 0x56df60 in main /home/d34df00d/Programming/leechcraft/src/core/main.cpp:101:9
    #35 0x7f81bd18061f in __libc_start_main (/lib64/libc.so.6+0x2061f)
    #36 0x446768 in _start (/usr/local/bin/leechcraft-qt5+0x446768)
#oownwe 5
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Пидорский QWebEngine требует инициализации прям в гуи-треде, что заставляет грузить библиотеку, линкующуюся с QWebEngine, только в GUI-треде. Придётся прокидывать из библиотек в ядро информацию о том, что их можно загружать только в гуи-треде, и что для них нельзя применять оптимизацию с параллельной подгрузкой нескольких плагинов сразу.

ЕБанутые люди.

#oownjg
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

В Qt 5.7 сломали, похоже, qDebug, и теперь expression sfinae для проверки дебагебельности типа не работает:

    template<typename T>
    constexpr bool TestDebuggable (typename std::add_pointer<decltype (qDebug () << T {})>::type)
    {
        return true;
    }

    template<typename T>
    constexpr bool TestDebuggable (...)
    {
        return false;
    }

Получаем:

/home/d34df00d/Programming/leechcraft/src/plugins/azoth/plugins/mucommands/tests/testutil.h:35:69: error: cannot yet mangle expression type PredefinedExpr
        constexpr bool TestDebuggable (typename std::add_pointer<decltype (qDebug () << T {})>::type)
                                                                           ^~~~~~
/usr/include/qt5/QtCore/qlogging.h:158:71: note: expanded from macro 'qDebug'
#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
                                                                      ^~~~~~~~~~~~~~~~~~
/usr/include/qt5/QtCore/qlogging.h:151:30: note: expanded from macro 'QT_MESSAGELOG_FUNC'
  #define QT_MESSAGELOG_FUNC Q_FUNC_INFO
                             ^~~~~~~~~~~
/usr/include/qt5/QtCore/qcompilerdetection.h:230:29: note: expanded from macro 'Q_FUNC_INFO'
#  define Q_FUNC_INFO       __PRETTY_FUNCTION__
                            ^~~~~~~~~~~~~~~~~~~
#ootmai
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Ежегодный пост о том, что Qt в ${DATE}-м-то году не умеют выводить возвращаемый тип функтора для QtConcurrent::map. Наколенный тредпул из говна и boost.asio умеет, а это поделие — нет.

Как дальше жить.

#oozdxl
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.