LINUX.ORG.RU

67
Всего сообщений: 646

Собрать программу под другой дистрибутив

Всем привет.

Есть некая программа (без GUI) на Qt. Некие ребята попросили программу себе.

Запросил версию системы вплоть до списка установленных пакетов с их версиями.

Я так понимаю, мне следует сделать виртуалку, поставить туда тот же дистр, что и у ребят, установить доступный в репах Qt и осуществить сборку, после чего отправить получившиеся бинарники?

Или может такие вещи делаются проще/по-другому?

Запрос разовый, поэтому заморачиваться с опакечиванием в .deb смысла не вижу.

 

s3rjke ()

Планируется ли QVulkanPaintDevice?

По аналогии с QOpenGLPaintDevice.

Чтобы скормить ему в конструктор VkDevice, VkFramebuffer, VkCommandBuffer и рисовать QPainter-ом спокойно. А потом просто отправить этот командный буфер на счёт и изображение бы в VkImage отрендерилось. А внутри САБЖ бы сам менеджил необходимые ему буферы, текстуры, шейдеры, и т.д.

А может и вовсе система QPainter-ов устарела? Если так, то какой современный API agnostic способ рисовать в Qt двумерное что-то?

 , , , ,

robus ()

В каких случаях итератор QHash становится невалидным кроме случаев...?

В каких случаях итератор QHash (Qt5) становится невалидным кроме случаев удаления целевого элемента или самого контейнера?

 

normann ()

Не вызыватся слот в отдельном потоке (соединение Qt::QueuedConnection)

Имею проект: https://github.com/xintrea/mytetra_dev
Коммит: f3c08a83 (ветка experimental), это просто последний коммит на текущий момент.

У меня есть класс EditorShowTextDispatcher (далее буду называть его просто Dispatcher), который переносится в отдельный поток относительно кода основного приложения. Перенос делается согласно памятке:

Последовательность переноса объекта в отдельный поток для Qt5

Код класса Dispatcher расположен по пути:

/app/src/libraries/wyedit/EditorShowTextDispatcher.cpp

Перенос в отдельный поток происходит в конструкторе данного класса. Перенос осуществляется методом moveToThread(), он вызывается, естественно, ДО настроек коннектов данного класса.

Настройка коннекта для вызова слота класса Dispatcher происходит в классе PeriodicCheckBase:
/app/src/libraries/PeriodicCheckBase.cpp

Настройка коннекта происходит в методе init(). Он вызывается после отработки конструктора класса Dispatcher, то есть после переноса класса Dispatcher в отдельный поток. В коннекте соединяются методы:
c=connect(this, 
          &PeriodicCheckBase::doUpdateDetachedWindows,
          EditorShowTextDispatcher::instance(),
          &EditorShowTextDispatcher::closeWindowForNonExistentRecords,
          Qt::QueuedConnection);

Испускание сигнала doUpdateDetachedWindows() происходит в методе timerEvent() данного класса PeriodicCheckBase.

Создание коннекта происходит успешно, я проверяю результат работы connect(), там все в порядке. В консоль никаких ворнингов в рантайме не сыплется.

Проблема в том, что слот closeWindowForNonExistentRecords() не вызывается.

Если же поменять тип соединения на Qt::DirectConnection, то слот отрабатывает нормально.

Вопрос: где еще что надо докручивать, чтобы слот можено было вызвать в отдельном потоке?

 , , , ,

Xintrea ()

Баг в Qt?[РЕШЕНО]

Заметил странное поведение, если я переопределяю в своём виджете mouseMoveEvent, то перестаёт работать setTransformationAnchor(QGraphicsView::AnchorUnderMouse). Версия 5.15.1. Это баг или фича?

 ,

andalevor ()

Не могу добавить шаг компиляции - ошибка «Невозможно запустить процесс ...»

Имею QtCreator 4.10.2

Пытаюсь в настройках сборки сделать дополнительный шаг. Нажимаю:

Сборка, добавить этап -> Особый

В поле «Команда» пишу:
echo hello

В результате, при сборке появляется ошибка:
Невозможно запустить процесс «echo hello»

Думал, может там среда выполнения не настроена, попробовал по-всякому:
/bin/echo hello

/bin/bash -c "echo hello"
/bin/bash -c echo hello
bash -c "echo hello"
bash -c echo hello

То же самое, невозможно запустить процесс.

Вопрос: как блин в QtCreator настраивать особый шаг обработки?

 , , ,

Xintrea ()

Впервые пишем на R. Критикуйте

Собрали тут давеча в ходе очередного тулкитосрача свежую статистику. Ну и покуда вбрасывали подобное ранее — решили собрать старые срезы и построить график ;)

Исходные данные (первый срез не Наш, но тоже учли ;))

С Python+Matplotlib много лишнего пердолинга, с TeX+TikZ и подавно, с табличными процессорами и вовсе связываться лишний раз не хотим — решили в этот раз попробовать R.

(ожидания не очень оправдало, но в основном потому, что данные очень sparse, а так выглядит довольно заточенным под задачу ;))

pdf(file="guitoolkits_timeline.pdf")

dates <- c(as.Date('2008-02-28'), as.Date('2014-08-25'), as.Date('2017-08-10'), as.Date('2019-01-22'), as.Date('2020-09-08'))
gtk2 <- c(1466, 1289, 2373, 1455, 588)
gtk2_dates <- dates[1:5]
gtk3 <- c(525, 1017)
gtk3_dates <- dates[c(2, 5)]
qt4 <- c(1374)
qt4_dates <- dates[c(2)]
qt5 <- c(185, 1851)
qt5_dates <- dates[c(2, 5)]

plot(dates, gtk2, type="o", pch="o", lty=1, ylim=c(0, 3000), ylab="dependants")
points(gtk3_dates, gtk3, pch="*")
lines(gtk3_dates, gtk3)
points(qt4_dates, qt4, pch="+")
lines(qt4_dates, qt4)
points(qt5_dates, qt5, pch="#")
lines(qt5_dates, qt5)

legend(as.Date('2008-01-01'), 3000, legend=c("GTK+2", "GTK+3", "Qt4", "Qt5"), pch=c("o", "*", "+", "#"), lty=1, ncol=1)

Выхлоп

cast @wandrien

 , , , ,

mertvoprog ()

qt.qpa.plugin: Could not find the Qt platform plugin «xcb» in "" (статичиская сборка)

Всем привет! При запуске приложения на Qt (static build) выводит ошибку:

QFactoryLoader::QFactoryLoader() ignoring "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3" since plugins are disabled in static builds
qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Если добавить в qtimportplugins:

Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)

То будет undefined reference:

/home/continue/qt5/qtbase/src/plugins/platforms/xcb/qxcbmain.cpp:56: undefined reference to `QXcbIntegration::QXcbIntegration(QStringList const&, int&, char**)'

хотя qxcb линкуется в проект. Как можно решить?

 , ,

continue ()

Статичиская линковка приложения Qt

Привет! Какие библиотеки нужны для статической линковки Widgets? Я линкую эти:

qt_libs = { 
	"Qt5Core", 
	"Qt5Gui",
	"Qt5Widgets",
	"Qt5EventDispatcherSupport",
	"Qt5FontDatabaseSupport",
	"Qt5PlatformCompositorSupport",
	"Qt5ThemeSupport",
	"qtfreetype",
	"qtlibpng",
	"qtpcre2",
	"qtharfbuzz"
}
links { qt_libs }

Но получаю undefined reference. build.log

 , , , ,

continue ()

QtWebEngine - насколько ungoogled?

QtWebEngine использует движок Chromium. Chromium в оригинальном виде насыщен гуглозондами, которые пытается выпилить проект Ungoogled Chromium. Насколько googled QtWebEngine?

Я тут просто потыкал последний Falkon, который является обёрткой для QtWebEngine, в принципе, оно вполне уже юзабельно. Ещё и адблок искаропки. Если QtWebEngine совсем ungoogled, то Флакон этот вполне себе может стать весьма годной альтернативой напичканному зондами Хрому с катящимся в полное дерьмо Фаерфоксом.

 , , ,

Stanson ()

Сборка Qt из исходников (хостовая ось x64, сборка под x86)

Всем привет, как можно собрать Qt на машине, где OS x64, а либы от Qt нужны для x86. При линковке ошибки:

../usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/gcc/x86_64-suse-linux/10/libstdc++.so when searching for -lstdc++
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/gcc/x86_64-suse-linux/10/libstdc++.a when searching for -lstdc++
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: cannot find -lstdc++
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: cannot find libgcc_s.so.1
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/gcc/x86_64-suse-linux/10/libgcc.a when searching for -lgcc
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: cannot find -lgcc
collect2: error: ld returned 1 exit status

configure:

./cofigure -debug-and-release -static -static-runtime -opensource -confirm-license -platform linux-g++-32 -qt-zlib -qt-libpng -qt-libjpeg -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -nomake examples -nomake tests

Но почему-то все равно использует lib64, а не lib (32)

 , , ,

continue ()

Кто-нибудь когда-нибудь вылечит qt5?

Ну вот, случилось гадость, которою я ждал давно: полезное приложение (telegram-desktop) теперь жёстко зависит от qt5-qtwayland.

$ dnf repoquery --requires telegram-desktop | grep -i wayland
libQt5WaylandClient.so.5()(64bit)
libQt5WaylandClient.so.5(Qt_5.13.2_PRIVATE_API)(64bit)

$ dnf repoquery --requires --resolve telegram-desktop | grep wayland
qt5-qtwayland-0:5.13.2-2.fc31.x86_64

Опять удивляюсь, на форуме тишина!!! Народ, там чё, никто не использует вяленого и qt-проги одновременно???

Не люблю ныть, но довольно неприятное чувство, когда ты обновил телегу и получил это: https://i.ibb.co/S37P9Jj/2020-08-09-18-28.png

Красиво, правда? Почти все qt-проги в труху, только goldendict (видимо из-за старости) кладёт болт на вейланд и anki (установил с сайта через make).

Простое решение с удалением гадкого пакета теперь не катит, как я советовал здесь: Fedora(31-32) GNOME + Wayland + qt5 (держу в курсе!)

Удалять телеграмм смысла не вижу, походу всё равно карачун настанет потихоньку всем, если чего-нибудь не переделают. Так что теперь остаётся одно решение: копировать desktop-файлы в ~/.local/share/applications и строку Exec= заменять на Exec=env QT_QPA_PLATFORM=xcb, как рекомендовано здесь: https://russianfedora.github.io/FAQ/tips-and-tricks.html#index-16

Однако самой телеге это не особо помогло, ну хоть тень появилась и то хлеб, а вот flameshot вылечить не удалось, остальным полегчало: https://i.ibb.co/zfB1x1B/2020-08-09-18-37.png

Куда ещё копать по этому поводу?

 , , ,

papin-aziat ()

«Ассинхронность» QNetworkAccessManager

Создаю в потоке QThread несколько объектов QNetworkAccessManager и замечаю, что ОС создает отдельный поток для каждого объекта который создал сетевое соединение. Собираю на Qt-5.14.2, gcc 5.3.1 64x.

Я что-то делаю не так или это такая ассинхронность под капотом Qt?

 ,

ocr ()

Управление чужими графическими окнами (Xlib)

Здравствуйте. Работаю с ОС AstraLinuxSE 1.6 на рабочем месте с двумя и более мониторами, накопилось несколько вопросов, на которые не могу найти ответы.

  1. Функции XMoveResizeWindow, XMoveWindow, XResizeWindow из библиотеки Xlib двигают окна жестко привязываясь к краям монитора, то есть невозможно поместить окно сразу на два и более мониторов. Попытался обойти данную проблему путем изменения параметра override_redirect в атрибутах окна. Но таким образом оконный менеджер не воспринимает изменение положения окна и при переключении рабочего стола или сворачивании/разворачивании окна, оно возвращается на исходную позицию.

  2. Можно ли из своей программы задавать стартовые координаты окна (при запуске чужого приложения)?

  3. Можно ли отследить существование какого либо окна(чужого), дабы избежать ошибки BadWindow и остановки программы. Или же отследить появление данной ошибки (исключений при этом, видимо, не генерируется).

 , ,

anrie30 ()

Дробный размер шрифта в qt5ct

Привет. Использую qt5ct для настройки внешнего вида Qt-приложений. Шрифт размером 12pt кажется большим, а 11pt - маленьким. Ввести размер 11.5pt нельзя. Есть ли способ обмануть qt5ct и сделать это?

В ~/.config/qt5ct/qt5ct.conf есть строка: general=@Variant(\0\0\0@\0\0\0\x12\0N\0o\0t\0o\0 \0S\0\x61\0n\0s@(\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) . Кажется, что в ней закодирована информация о шрифте. Есть идеи, как в ней заменить 12 на 11.5?

PS. Править исходники не хочется

 , , ,

Rot1 ()

Qt5, приплыли?

добрый день

за новостями не слежу, был немного удивлен:

http://download.qt.io/official_releases/qt/5.15/5.15.0/OFFLINE_REAMDE.txt

Due to The Qt Company offering changes, open source offline installers are not available any more since Qt 5.15. Read more about offering changes in the https://www.qt.io/blog/qt-offering-changes-2020 blog.

If you need offline installers, please consider our new Qt for Small Business offering: https://www.qt.io/blog/available-now-qt-for-small-businesses

ваше мнение, комменты...

спасибо

 , ,

sunjob ()

Баг с автоматической перемоткой QGraphicsScene

В QGraphicsScene при перемещении прямоугольников (и других итемов) происходит перемотка всей сцены целиком;

setResizeAnchor(QGraphicsView::NoAnchor); setAlignment(Qt::AlignAbsolute);

не помогли

проблема проявляется:

rectangle = addRect(0, 0, 10, 10);
rectangle->setX(300)

проблема не проявляется

rectangle = addRect(0, 0, 10, 10);
rectangle->setX(100)

Как с этим бороться?

 ,

next_time ()

Шрифты слипаются на новой Ubuntu 20.04

Поставил на Lubuntu 20.04 шрифты Tahoma, отключил сглаживание но буквы слипаются.
Все те же правила fontonfig, которые работали в 14.04, 16.04, 18.04 не работотают нормально на 20.04.
>>Картинка тут<<
Проблема в самом QT?
Какие будут варианты?

UPD. Вот сравните
Для меня загадка, как вы можете оспаривать право на отображение таких шрифтов без сглаживания? Сначала Офтопик Seven обломал их а тепер и в Линуксе все поломали.

UPD2. У меня уже вопрос принципиальный: Зачем галочка «отключить сглаживание» если без сглаживания оно не работает корректно?

UPD3. Похоже проблемы с шрифтами исключительно в QT5, firefox отображает шрифты без сглаживания корректно.

UPD4. Пробовал подменять /usr/lib/x86_64-linux-gnu/libfreetype.so.6.17.1 файлом от Lubuntu 14.04.6-libfreetype.so.6.11.1, зависал тут же; файлом libfreetype.so.6.15* от Lubuntu 18.04.4 - не зависал, но рамка вокруг окна пропадала. Не рецепт.

 ,

abbat81 ()

QPrintDialog: Cannot be used on non-native printers

Пишу на C++ и qt. Вывод текста на печать делаю следующим образом:

QPrinter Printer(QPrinter::PrinterResolution);
PrintDialog = new QPrintDialog(&Printer);
Printer.setPageSize(QPrinter::A4);
Printer.setOrientation(QPrinter::Portrait);
Printer.setPageMargins(20, 20, 20, 20, QPrinter::Millimeter);
Printer.setFullPage(false);
Printer.setOutputFormat(QPrinter::NativeFormat);
QTextDocument Doc;
QFont DocFont("PT Serif");
DocFont.setPixelSize(10);
Doc.setDefaultFont(DocFont);
QString HtmlForPrint = "<b>Test</b>";
Doc.setPageSize(Printer.pageRect().size());
Doc.setDocumentMargin(0);
Doc.setDefaultFont(DocFont);
Doc.setHtml(HtmlForPrint);
if (PrintDialog->exec()) {
    Doc.print(&Printer);
}
delete PrintDialog;
При сборке в debian всё работает правильно, при сборке в windows при попытке печати ничего не происходит (диалоговое окно не появляется), в выводе приложения:
QPrintDialog: Cannot be used on non-native printers
Пробывал qt 5.11, qt 5.9, windows 10 x64, windows 7 x64, windows 7 x86 - проблема остается везде. Собственно, что я делаю не так?

 ,

MIV ()

Узнать, на какую строку модели переключился курсор после удаления строки

Не могу найти решения.

Вот стоит курсор в QTableView на какой-то строке. В некий момент происходит удаление строк. Может удалится одна строка, может удалиться несколько строк. В любом случае, может удалиться та строка, на которой стоял курсор.

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

Каким способом это можно сделать?

Никакого толку из ловли сигнала rowsRemoved() модели получить невозможно: в нем нет информации о курсоре. Так же не помогает ловля selectionChanged() для вида - этот сигнал может просто не сгенерироваться, потому что если курсор стоял, например на 5-й строке, удалилась 5-я строка, но курсор так и остался на 5-й строке, потому что на ее место передвинулась бывшая 6-я.

В общем я не могу узнать, на какой строке очутился курсор после удаления строки/строк. Как это сделать?

 , , , ,

Xintrea ()