LINUX.ORG.RU

Сообщения rumgot

 

Выбор док станции

Форум — Linux-hardware

Добрый день.

В догонку моей темы про выбор монитора (Выбор монитора 27 дюймов 4K).

Посоветуйте пожалуйста док станцию для компа, которая будет работать в Linux. Т.е. мне нужна возможность придти домой с ноутом, подключиться по Usb Type-C и чтобы монитор / сеть / наушники подключились автоматически тоже, ну и зарядка пошла.

Стоит ли переплачивать за док станции Lenovo ThinkPad или и китайская будет норм или другая фирма?

Или может вы пользуетесь данной функциональность, которая есть в мониторе?

Пользуетесь ли вы вообще данной функциональнстью?

Поделитесь опытом, что работает, что не работает, что работает плохо и т.п.

 , , , ,

rumgot
()

Выбор монитора 27 дюймов 4K

Форум — Linux-hardware

Добрый день.

Выбираю монитор 27 дюймов 4K. Главное назначение написание и чтение исходников в IDE и простых редакторах (notepad++, kate), использование терминала. Иногда фотки обрезать / игры / фильмы, но это вообще вторично. Главное - это именно длительное чтение / написание исходников, чтобы глаза меньше устанавали и напрягались. Посоветуйте пожалуйста, на что сейчас смотреть (модели, производители), на что точно смотреть не стоит. Только пожалуйста, из того, что есть в продаже.

Вот например Xiaomi один из самых дешевых https://catalog.onliner.by/display/xiaomi/rmmnt27nucn , шило, да?

Или смотреть Dell? Или Samsung? Или LG? Или еще что?

Перемещено hobbit из general

 , ,

rumgot
()

Какого фига комменты закрыты?

Форум — Linux-org-ru

А почему собственно комменты закрыты тут Госдума РФ утвердила законопроекты, которые могут помешать участию граждан в крупных СПО-проектах ?

Думаете ничего цензурного не напишут?

 ,

rumgot
()

Удаление темы про ошибку открытия rutor

Форум — Linux-org-ru

https://www.linux.org.ru/forum/desktop/17159495

@maxcom, ты перебздел или был запрос от ркн? Любопытно.

 

rumgot
()

Калибровка тачскринов в Linux

Форум — Development

Добрый день.

Есть промышленный моноблок с Linux. Ну т.е. Linux туда я поставил. Так то диск с драйверами только под Windows. У него [моноблока] есть тачскин. Я пытаюсь откалибровать (получить парметры калибровки) его с помощью утилиты xinput_calibrator (кликаешь по 4 точками) и вот всякий раз после второго/или третьего/или четвертого клика я получаю ошибку: Mis-click detected, restarting…

Из https://linux.die.net/man/1/xinput_calibrator я вижу:

If you keep getting the message 'Mis-click detected, restarting...', one of the following is happening: 1. you are bad at clicking on crosses, use a stylus or increase the --misclick threshold
2. your device is not properly supported by the kernel, it interprets the clicks wrong
3. your screen has a non-linear deformation, 4-point calibration can not help you

Пункт 1 (increase the –misclick threshold) я пробовал итоговая матрица трансформации получается неточная - получаются большие неточностии в кликах/тапах.

Пункт 2 - ну хз, может и оно конечно, но пока будем думать, что все же нет.

Пункт 3 - вот может быть этот пункт. Тогда вопрос: xinput_calibrator умеет калибровать только по 4 точкам. А как мне (с помощью какой программы / алгоритма расчета) откалибровать не по 4 точкам, а по большему количеству. Например в Windows на этом же моноблоке колибровка происходит с использованием программы, которая идет вместе с драйвером на диске и там можно колибровать по 8/16/24 точкам (может немного напутал количество, но там точно много раз нажимать нужно, и не только по 4 угловым точками, а по промежуточным тоже и после такой колибровки в Windows работает почти идеально точно.

 , , , ,

rumgot
()

Named Entity Recognition (NER) C++ библиотеки

Форум — Development

Добрый день. Есть задача Named Entity Recognition (NER). Много гайдов и библиотек на python. А на C++ кто-нибудь эту задачу решал? Может посоветуете хорошие либы.

 , ,

rumgot
()

Qml доступ к QVariant из QPair / std::pair

Форум — Development

Qml доступ к QVariant из QPair / std::pair

Добрый день.

Qt 6.3.2

Есть код, который добавляет в Qml объект из C++ кода:

QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
QList<QPair<QString, QString>> titlesTexts;
titlesTexts.append(qMakePair("title 0", "text 0"));
titlesTexts.append(qMakePair("title 1", "text 1"));
titlesTexts.append(qMakePair("title 2", "text 2"));
titlesTexts.append(qMakePair("title 3", "text 3"));
titlesTexts.append(qMakePair("title 4", "text 4"));
context->setContextProperty("titlesTexts", QVariant::fromValue(titlesTexts));

Далее в коде Qml пытаюсь прочитать данный список:

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Component.onCompleted: {
        console.log("Program was caled")

        for (var key in titlesTexts) {
            var item = titlesTexts[key]
            console.log(item)
            console.log(item.first, item.second)
        }
    }
}

При этом получаю вывод:

qml: Program was caled
qml: QVariant(std::pair<QString,QString>, std::pair("title 0","text 0"))
qml: undefined undefined
qml: QVariant(std::pair<QString,QString>, std::pair("title 1","text 1"))
qml: undefined undefined
qml: QVariant(std::pair<QString,QString>, std::pair("title 2","text 2"))
qml: undefined undefined
qml: QVariant(std::pair<QString,QString>, std::pair("title 3","text 3"))
qml: undefined undefined
qml: QVariant(std::pair<QString,QString>, std::pair("title 4","text 4"))
qml: undefined undefined

Как бы получить доступ к элементам внутри пар?

Решено

Спасибо @aol

Ссылки с информацией:

https://forum.qt.io/topic/87558/qlist-of-qpair-in-qml

https://www.qtcentre.org/threads/57397-What-is-the-associate-type-of-QList-lt-QPair-lt-double-QString-gt-gt-in-qml

Нужно поменять qml код так:

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Component.onCompleted: {
        for (var key in titlesTexts) {
            var item = titlesTexts[key]
            console.log(item.title, item.text)
        }
    }
}

Код С++:

QQmlApplicationEngine engine;
QQmlContext* context = engine.rootContext();
QVariantList titlesTexts;
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 0"}, {"text", "text 0"}})));
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 1"}, {"text", "text 1"}})));
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 2"}, {"text", "text 2"}})));
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 3"}, {"text", "text 3"}})));
titlesTexts.append(QVariant::fromValue(QVariantMap({{"title", "title 4"}, {"text", "text 4"}})));
context->setContextProperty("titlesTexts", QVariant::fromValue(titlesTexts));

 , ,

rumgot
()

Ubuntu 20.04 Qt не отображается иконка на панели задач

Форум — Development

Добрый день

Собственно есть самый примитивный проект на Qt на виджетах. При его запуске через Qt Creator или вручную на левой вертикальной панели задач вместо иконки приложения просто пустой квадрат. Проверял на Qt5.15.2/6.2.4/6.3.2 везде такая же фигня.

При этом в qBittorrent, установленного в системе из стандартного репозитория иконка нормально отображается.

Подскажите пжлс, в чем прикол? Может я какой нужный пакет удалил. Не помню.

 , ,

rumgot
()

Мониторинг аудио записанного через QMediaCaptureSession

Форум — Development

Мониторинг аудио записанного через QMediaCaptureSession

Добрый день.

При использовании QMediaCaptureSession, QMediaRecorder для записи аудио с микрофона в файл получается проблема: Я начинаю запись через метод record() класса QMediaRecorder. Далее я получаю сигнал QMediaRecorder::recorderStateChanged со значением QMediaRecorder::RecordingState, и вывожу в окне надпись, что запись начата. Проблема в том, что результирующая запись начинается с некоторой задержкой, а не в момент получения сигнала QMediaRecorder::RecordingState, т.е. на запись не попадает звук или слова, которые произносились СРАЗУ после получения сигнала QMediaRecorder::RecordingState в течение 1-2 секунд.

Вместе с тем в документации Qt есть такое утверждение: https://doc.qt.io/qt-6/qtmultimedia-changes-qt6.html

New features in Qt 6
...
You can now also monitor the audio recorded by a capture session.
...

Вопросы:

  • Могу ли я как-то анализировать данные, которые идут на запись и понять, что данные еще не начали приходить и еще не нужно выводить в окне прораммысообщение о том, что запись начата
  • Что имеется в виду в документации Qt под указанным утверждении о том, что вы можете мониторить аудио, записанное через сессию захвата?

 , , ,

rumgot
()

QSystemTrayIcon не генерирует сигналы activated в Gnome

Форум — Development

Привет, коллеги.

Есть Ubuntu 22.04/20.04. Проверено на Qt5.15.2/6.2.4/6.4.2.

Для работы с треем использую QSystemTrayIcon. Так вот во первых не отображается иконка пока не вызвать setContextMenu(), но это половина проблемы. А главная проблема в том, что не генерируются сигналы activated для левой/правой кликов мышью и для двойного клика (зато генерируются для клика средней кнопкой).

При этом в Kubuntu 22.04 генерируется все кроме двойного клика. В Linux Mint Cinnamon 20/21 генерируются сигналы на клик левой и средней кнопками.

В Windows 11 генерируются сигналы на все.

Поясните пожалуйста - это холтура разрабов Qt или какие то особенности обработки кликов по иконкам в трее в Gnome/Gtk ?

 , , ,

rumgot
()

QML ScrollBar / ScrollIndicator - отключить авто скрытие

Форум — Development

Добрый день.

Есть Flickable и внутри его указано свойство ScrollBar.vertical:


Flickable {
    // ...
    ScrollIndicator.vertical: ScrollIndicator {}
    // ...
}

Все работает, но есть нюанс :-)

Если высота контента у Flickable требует полосы прокрутки, то она (полоса) появляется только в момент начала прокрутки, а в состоянии покоя полоса скрыта. После осуществления прокрутки полоса через пару секунд плавно исчезает.

Хочется, чтобы полоса, если высота контента ее требует, была видна всегда и не исчезала. Сразу предупрежу, что свойство ScrollBar.policy: ScrollBar.AlwaysOff не совсем то, т.к. при этом полоса прокрутки становится видимой постоянно, даже в том случае, когда высота контента Flickable меньше высоты самого Flickable (а у ScrollIndicator в принципе нету свойства policy).

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

ScrollIndicator.vertical: ScrollIndicator {
    contentItem.onOpacityChanged: {
        console.log("contentItem.onOpacityChanged: " + contentItem.opacity)
    }
}

то можно увидеть, что исчезновение организовано методом постепенной смены contentItem.opacity.

По информации отсюда https://stackoverflow.com/a/42203178 можно использовать вот такие хаки, чтобы добиться постоянной видимости у ScrollBar или ScrollIndicator:

Вариант 0
Flickable {
    // ...
    ScrollIndicator.vertical: ScrollIndicator {
        contentItem.opacity: 1.0
        contentItem.onOpacityChanged: {
            contentItem.opacity = 1.0
            
            // Можно раскомментировать данную строку и убедиться,
            // что в процессе работы меняется именно contentItem.opacity
            // (предварительно нужно закомментировать установку contentItem.opacity выше)
            // console.log("contentItem.onOpacityChanged: " + contentItem.opacity)
        }
    }
    // ...
}
Вариант 1
Flickable {
    // ...
    ScrollIndicator.vertical: ScrollIndicator {
        active: true
        onActiveChanged: {
            active = true
            
            // Можно раскомментировать данную строку и убедиться,
            // что в процессе работы меняется именно onActiveChanged
            // (предварительно нужно закомментировать установку onActiveChanged выше)
            // console.log("onActiveChanged " + active)
        }
    }
    // ...
}    

Это конечно работает, но согласитесь, это все таки некрасиво: ведь какой-то обработчик там внутри все же срабатывает и еще таймер запускает для постепенной смены прозрачности. Может кто-нибудь знает более умное решение?

А да, что вообще думаете про такое поведение скролбара с автоскрытием? Может и хрен с ним? На смартфоне так практически во всех приложениях и работает (но в некоторых приложениях при первом отображении области со скролбаром он на секунду отображается, потом снова пропадает).

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

Flickable {
    // ...
    ScrollIndicator.vertical: ScrollIndicator {
        active: true
        Component.onCompleted: {
            active = false
        }
    }
    // ...
}    

@Pavval, милости прошу на обсуждение.

 , ,

rumgot
()

QtQuick/QML для Android в 2021

Форум — Development

Добрый день.

Тема уже так или иначе поднималась. Прошу прощения за это. Но хотелось бы актуализировать.

Есть необходимость написать приложение для Android для личных нужд. И при этом получить немного опыта в разработке для Android. Я имею многолетний опыт работы с C++/Qt и учитывая это, есть ли смысл делать приложение на C++/QtQuick/QML или проще и лучше взять тот же Kotlin (java или что там еще сейчас), почитать немного литературы и сделать на нем? Сегодня попробовал собрать и запустить на своем ведрофоне этот пример из документации Qt (https://doc.qt.io/qt-5/qtbluetooth-heartrate-game-example.html) (кстати говоря толком пример не завелся: зависает на Splash Screen) и должен сказать, что сборка под Android как была костыльной года четыре назад, когда я первый раз ее пробовал, так костыльной и осталась. Так вот и думаю, нужно ли мне геморой в виде занимательного квеста по сборке или взять изначально предназначенный язык. Может быть тут есть люди, которые делали что-то интересное под Android на C++/Qt/QtQuick/QML, интересно узнать истории успеха.

 , , , ,

rumgot
()

Тачскрин настройка порога перемещения

Форум — Desktop

Добрый день. Есть компьютер в промышленном корпусе и у него тачскрин прдключенный через последовательный порт. Далее используется программа inputattach для создания устройства ввода (используется параметр -t213 (Sahara Touch-iT213 Tablet PC)). Вызов inputattach оформлен в виде сервиса для systemd, который вызывается через правило udev. Кроме того для udev настроено правило для калибровки данного устройства (чтобы в той точке, где пальцем ведешь, указатель мыши и был). Но есть проблема: иногда не получается выполнить клик по значку на рабочем столе, т.е. я дотрагиваюсь (тапаю/тыркаю) до тачскрина в месте значка, но ничего не выделяется, при этом указатель мыши находится над значком. При этом если мышкой кликнуть в этом же месте - все работает. Также иногда не получается поместить фокус ввода в поде ввода. У меня есть теория, что когда я тапаю по тачскрину, он воспринимает это как перемещение указателя, а не как клик, т.е. существует очень низкий порог того, как должна измениться координата тапа по сравнению предыдущей, чтобы это было защитано за перещение, а не за клик. Можно ли это как-то настроить? Влияет ли на это матрица трансформации, используемая для калибровки?

 , ,

rumgot
()

Просьба подтвердить баг в Qt - QTBUG-88125 ошибка в MOC

Форум — Development

Добрый день.

Версия Qt с данным багом: Qt5.15.1.

Версия Qt без данного бага: Qt5.12.9.

Повторно описывать подробно не буду, если что милости прошу на страницу бага (https://bugreports.qt.io/browse/QTBUG-88125).

Если у нас есть некий производный от QObject (или другого в его иерархии) с макросом Q_OBJECT и если в данном заголовочном файле есть подключение <bsoncxx/types.hpp> (напрямую или косвенно) то будет ошибка компиляции метаобъектным компилятором Qt (MOC).

Проблема заключается в следующих строках файла <bsoncxx/types.hpp>:

enum class type : std::uint8_t {
#define BSONCXX_ENUM(name, val) k_##name = val,
#include <bsoncxx/enums/type.hpp>
#undef BSONCXX_ENUM
};

И вот содержимое <bsoncxx/enums/type.hpp>:

#ifndef BSONCXX_ENUM
#error "This header is only meant to be included as an X-macro over BSONCXX_ENUM"
#endif

BSONCXX_ENUM(double, 0x01)
BSONCXX_ENUM(utf8, 0x02)
BSONCXX_ENUM(document, 0x03)
BSONCXX_ENUM(array, 0x04)
BSONCXX_ENUM(binary, 0x05)
BSONCXX_ENUM(undefined, 0x06)
BSONCXX_ENUM(oid, 0x07)
BSONCXX_ENUM(bool, 0x08)
BSONCXX_ENUM(date, 0x09)
BSONCXX_ENUM(null, 0x0A)
BSONCXX_ENUM(regex, 0x0B)
BSONCXX_ENUM(dbpointer, 0x0C)
BSONCXX_ENUM(code, 0x0D)
BSONCXX_ENUM(symbol, 0x0E)
BSONCXX_ENUM(codewscope, 0x0F)
BSONCXX_ENUM(int32, 0x10)
BSONCXX_ENUM(timestamp, 0x11)
BSONCXX_ENUM(int64, 0x12)
BSONCXX_ENUM(decimal128, 0x13)
BSONCXX_ENUM(maxkey, 0x7F)
BSONCXX_ENUM(minkey, 0xFF)

Update 0 Временное решение

Все директивы #include для подключения заголовочных файлов библиотеки bsoncxx/mongocxx оборачивать в блоки с применением макроса Q_MOC_RUN:

#ifndef Q_MOC_RUN
// start to include the bsoncxx/mongocxx library header files
#include <bsoncxx/types.hpp>
#include <bsoncxx/array/value.hpp>
#include <bsoncxx/array/view.hpp>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/document/value.hpp>
#include <bsoncxx/document/view.hpp>
// etc
#endif

Спасибо @aol

 , ,

rumgot
()

Аналог git для большого количества файлов большого размера

Форум — Desktop

Добрый день.

Подскажите пожалуйста инструмент для выполнения резервного копирования (инкрементального) больших объемов данных с наличием версий. В основном мультимедиа: личные фото/видео, книги, фильмы, образы разделов. Желательно с интерфейсом командной строки (gui тоже пишите, если считаете нужным). Т.е. такой git только для файлов большого объема. Видел проект bup (https://github.com/bup/bup), может кто-то использовал, поделитесь опытом. Или просто использовать git? Но в таком случае, мне кажется будет долгая песня с большим объемом мультимедиа. Подскажите пожалуйста, кто-что думает?

 ,

rumgot
()

Роскомнадзор разблокировал Telegram

Форум — General

Эта новость достойна LOR? https://rkn.gov.ru/news/rsoc/news73050.htm

Если да, запилите пожалуйста. Четно признаюсь мне, лень.

 ,

rumgot
()

С++ размышление об указателях на члены-переменные структур/классов

Форум — Development

Добрый день. Нормально ли считается использовать обычные указатели на члены-переменные структур/классов, например так:

#include <iostream>

using namespace std;

struct A {
  int i;
};

void f(int *i) { cout << dec << *i << " " << hex << (long)i << endl; }
void f(int &i) { cout << dec << i << " " << hex << (long)&i << endl; }

void f(A *pa, int A::*am) {
  cout << dec << pa->*am << " " << hex << (long)&(pa->*am) << endl;
}

void f(A *pa) { cout << dec << pa->i << " " << hex << (long)&(pa->i) << endl; }
void f(A &ra) { cout << dec << ra.i << " " << hex << (long)&(ra.i) << endl; }

int main() {
  A a{55};

  // Номально ли делать так
  f(&a.i);
  f(a.i);

  // Или лучше так (чем лучше?)
  f(&a, &A::i);

  // Или может вообще лучше так
  f(&a);
  f(a);

  return 0;
}

// Вывод:
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274
// 55 7ffcb727e274

 

rumgot
()

Qt wigets рендеринг на OpenGL

Форум — Development

Добрый день. Подскажите пожалуйста с таким вопросом. Можно ли сделать так, чтобы рендеринг стандартных виджетов (QWidget и потомки) осуществлялся с использованием OpenGL, а не с использованием программного рендера. Вот например, столкнулся я с проектом, который представляет собой помойку из стандартных виджетов вперемешку с QML виджетами QQuickWidget и подумал, раз QML виджеты рисуются через OpenGL, то пусть бы все рисовалось через OpenGL. И еще вопрос: как вы относитесь к смещиванию стандартных виджетов и qml? Не приводит ли это к просадкам в производительности? Можно ли все делать полностью на qml или без виджетов не обойтись?

 , ,

rumgot
()

Внутреннее представление объекта зависит от реализации ???

Форум — Development

Добрый день.
Возможно вопрос соответствует не очень высокому уровню, прошу прощения, если что.
Вот есть такой код в книге «Язык программирования C++ С. Прата»:

const int LIM = 20;
struct planet {
    char name[LIM];
    double population;
    double g;
};
planet pi;

// Сохранение объекта pi в файл:
fout("planets.dat",ios_base::out | ios_base::app | ios_base::binary);
fout.write((char*) &pl, sizeof pi);
Правильно ли я понимаю, что внутреннее представление объекта pi принадлежащего структуре/классу planet определяется реализацией компилятора и не оговорено стандартом? И тот же вопрос для случая, когда среди членов класса будут объекты других классов, контейнеры, умные указатели и прочее. Немного уточню вопрос: массив char получающийся в итоге и сохраненный в файле будет одинаковый на разных платформах и компиляторах и оговорено ли в стандарте то какой будет этот масссив (т.е. оговорено ли, какое будет побайтовое представление объекта в памяти)?

UPD0 Помечу, что для единообразного преобразования числа в массив байт, и последующего единообразного обратного преобразования (даже при том, что эти преобразования могут быть выполнены на разных пк (например при передаче по сети) в программах, которые были скомпилированы разными компиляторами) можно использовать:
Boost.Lexical_Cast
std::stringstream (указано в документации к Boost.Lexical_Cast)
Qt QDataStream

 ,

rumgot
()

cmake добавить каталог заголовочных файлов к другим целям

Форум — Development

Добрый день.
В корне проекта есть каталог config. В нем есть файл config.h.in. Это шаблон конфигурационного файла на основе которого при сборке через механизм cmake configure_file() генерируется файл config.h который будет подключаться в исходниках целей через директиву

// Здесь не указываются пути, только имя файла
#include "config.h"

Также в каталоге config есть файл CMakeLists.txt следующего содержания (config.h.in добавляется к цели для того, чтобы отображаться в дереве проекта в IDE):

add_library(config config.h.in)
set_target_properties(config PROPERTIES LINKER_LANGUAGE CXX)
# или же можно установить свойства конкретного файла (с тем же эффектом)
# set_source_files_properties(config.h.in PROPERTIES LANGUAGE CXX HEADER_FILE_ONLY ON)

set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)

configure_file(config.h.in config.h)
Без второй строки получаю ошибку:
CMake Error: Cannot determine link language for target "config".
CMake Error: CMake can not determine linker language for target: config
(это из-за того что cmake по расширению .in не может определить язык поэтому далее я указываю язык явно через set_target_properties())
Данный файл подключается в корневом файле CMakeLists.txt через команду
add_subdirectory("config")
Также есть подкаталог program со своим CMakeLists.txt который подключается в корневом CMakeLists.txt также через команду add_subdirectory(). Вот содержимое CMakeLists.txt из подкаталога program:
add_executable(program main.cpp)

target_link_libraries(program library0 library1 config)
В данном случае я добавил config в команду target_link_libraries() для того, чтобы добавить к текущей цели каталоги с заголовочными файлами из цели config.
При данной конфигурации сборка работает.
Вопрос: правильная ли это архитектура? Или добавить путь к конфигурационному файлу удобнее иначе? Например через команду cmake add_custom_target (через нее у меня не получилось, но возможно я делал это как-то не корректно)?

 , ,

rumgot
()

RSS подписка на новые темы