Просмотр сообщений
|
Страниц: [1] 2 3 ... 8
|
1
|
Qt / Пользовательский интерфейс (GUI) / Custom QCursor и 125% DPI
|
: Мая 25, 2024, 11:55
|
Есть небольшая проблема: Windows скейлит стандартные курсоры с градацией в 50%, то есть: 100% - курсор размера 32×32 125% - 32×32 150% - 48×48 175% - 48×48 200% - 64×64 и тд, то есть при 100% и 125% курсор имеет один и тот же размер. Qt скейлит более плавно и, например, при масштабе 125% кастомный курсор имеет размер 40х40. Из-за этого, при переключении между стандартной стрелочкой Windows и кастомным курсором заметна разница в размере. Можно ли как-то заставить Qt скейлить курсоры (только курсоры) с таким же шагом как и Windows? Включён флаг AA_EnableHighDpiScaling, курсор устанавливаю так: cursor = QCursor(QIcon("custom.svg").pixmap(32, 32));
|
|
|
5
|
Qt / Пользовательский интерфейс (GUI) / QTreeView - сложные элементы и отдельный редактор [РЕШЕНО]
|
: Ноября 04, 2020, 18:00
|
Почитал про QTreeView, почти во всех примерах используются простенькие итемы на одно текстовое поле с соответствующим редактором в делегате. А вот как реализовать несколько сложных делегатов с постоянным отображением подвиджетов и отдельным редактором для них - не понятно. Объясню подробнее, на примере слоёв в фотошопе: Слои - https://ibb.co/LxKhLdZРедактор (открывается по дабблклику) - https://ibb.co/Vjs6GrfТо есть в понятиях Qt нужно сделать как минимум два делегата - итем, отображающий сам слой (с именем, икнокой блокировки, маской и тд) и итем, отображающий группу слоёв (иконка с папкой, стрелочка, имя и тд). Как это сделать? Как запихать в один QTreeView два делегата? Или это как-то делается в одном делегате? Ну, например, создается нужный виджет в зависимости от роли? Видел стандартный пример со звёздами, но там отрисовка была в переопределенном методе paint, но не рисовать же все виджеты вручную? Можно ли как-то установить готовый класс виджета для отображения? И отдельное окно для редактирования? То есть в идеале хотелось бы чтоб итем отображал всё вышеперечисленное, а по двойному клику на надписи - редактировалась сама надпись (прямо на итеме), по двойному клику в другом месте - открывался полноценный редактор слоя.
|
|
|
7
|
Qt / Общие вопросы / Re: Конфликт локальной и глобальной библиотеки
|
: Ноября 25, 2018, 21:09
|
Не совсем понял, в -I. находятся мои инклуды, так? А системные сами подключаются в самом конце? Но раз так, то зачем вообще нужны скобки и кавычки, если системные библиотеки в любом случае имеют самый низкий приоритет подключения?
|
|
|
8
|
Qt / Общие вопросы / Re: Конфликт локальной и глобальной библиотеки
|
: Ноября 25, 2018, 20:14
|
Не знаю, как получить список путей в инклудпатх? time.h не нуждается в явном указании компилятору, т.к. является системной библиотекой. Но в любом случае, если она там есть, <time.h> должен брать именно ее, а не локальную. И даже если ее там нет, все равно должен брать системную.
Вот вывод консоли сборки:
g++ -c -fno-keep-inline-dllexport -O2 -std=gnu++11 -Wextra -Wall -W -fexceptions -mthreads -DUNICODE -D_UNICODE -I..\TimeCollision -I. -IC:\Qt\5.10.0\mingw53_32\mkspecs\win32-g++ -o release\main.o ..\TimeCollision\main.cpp ..\TimeCollision\main.cpp: In function 'int main()': ..\TimeCollision\main.cpp:12:26: error: 'clock' was not declared in this scope cout << "Time" << clock();
|
|
|
9
|
Qt / Общие вопросы / Re: Конфликт локальной и глобальной библиотеки
|
: Ноября 25, 2018, 18:25
|
Если я ошибаюсь, то в чем разница между скобками и кавычками?
АФАИК "" сперва ищут в текущей фапке, а <> сразу в include_paths, но это не точно. Вот да, а тут получается, что <> берет сразу из текущей папки. Не порядок)
|
|
|
11
|
Qt / Общие вопросы / Re: Конфликт локальной и глобальной библиотеки
|
: Ноября 25, 2018, 16:16
|
Под глобальной областью я подразумеваю системные библиотеки, которые идут вместе с компилятором и пути к которым не требуется явно указывать при компиляции. time.h - одна из них. Сейчас проверил - так оно и есть. По идеи должно работать так: #include <time.h> - подключается системная библиотека #include "time.h" - подключается моя библиотека из проекта Если я ошибаюсь, то в чем разница между скобками и кавычками? https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
|
|
|
12
|
Qt / Общие вопросы / Re: Конфликт локальной и глобальной библиотеки
|
: Ноября 25, 2018, 04:52
|
TIME_H меня сразу напрягает, pragma once ?
Нет, это не помогло. По сути pragma once никак не влияет на очередность поиска хедера для включения. Тут проблема именно в том, что #include <time.h> по какой то причине ссылается именно на мой (локальный) файл, вместо системного (глобального).
|
|
|
13
|
Qt / Общие вопросы / Конфликт локальной и глобальной библиотеки
|
: Ноября 24, 2018, 18:46
|
Есть пустой widgets проект с собственным классом Time: C++ (Qt) #ifndef TIME_H #define TIME_H #include <QElapsedTimer> class Time { static QElapsedTimer timer; static qint64 startTime; static float _time; static qint64 _frames; static float _fps; static float _delta; static float _avrDelta; public: Time() = delete; static void tic(); inline static qint64 frames() { return _frames; } inline static float fps() { return _fps; } inline static float time() { return _time; } inline static float delta() { return _delta; } inline static float avrDelta() { return _avrDelta; } }; #endif // TIME_H
В Qt 5.10 получается конфликт библиотек, а именно в файле <ctime>, который есть в chrono, который есть в qobject. в ctime подключается хедер #include <time.h>, который почему то ссылается на мой хедер time.h, хотя угловые скобки должны в первую очередь искать в глобальной области видимости. Как с этим бороться? Очевидно, можно переименовать свой класс или поместить хедер в подпапку, но хочется разобраться, ведь так быть не должно.
|
|
|
15
|
Qt / Мультимедиа / Как посчитать общий вес всех QImage в массиве?
|
: Июня 29, 2018, 10:55
|
Не секрет, что QImage хранит свой массив пикселей в кэше отдельно от объекта. Таким образом, два одинаковых изображения могут занимать места как одно. В общем, есть вектор изображений: C++ (Qt) QVector<QImage> images;
Среди его элементов есть одинаковые изображения (с одним кэшем), например: - изображение 1
- изображение 2
- изображение 2
- изображение 2
- изображение 1
- изображение 3
То есть шесть разных объектов, но по сути всего три изображения, то есть в кэше хранятся всего три картинки. Вопрос: как посчитать реально занимаемый объем этого вектора? В мегабайтах.
|
|
|
|
|