Павел @kkmspb
фулстек разработчик С, С++,PHP,JS
Information
- Rating
- Does not participate
- Location
- Парголово, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity
Specialization
Fullstack Developer
Senior
From 250,000 ₽
OOP
Database
MySQL
PHP
C++
Programming microcontrollers
Qt
Software development
Development of drivers
C
Если вы обратили внимание:
таймер возвращает результат в окно (индикации). Этим стандартный не устроил.
Я третий раз уже объясняю, что мне надо возращать результат выполнения команды как разные объекты, разные варианты классов, структур и т.д. Чего тут не понятного?
Спасибо конечно. KDE конечно интересно как вариант. Но блин билдить kde исходники пока не готов. На будущее конечно посмотрим и Akonadi в.т.ч. Кстати я под виндой если что.
Ну извините, если задел ваше что-то.
Может кому из новичков все-таки полезно будет.
А "диалог окно на qt" я проверял по интернету и не раз. Тут же не речь о том как вывести диалоговое окно.
В принципе да. Но команду можно запускать и вне диалога. Сама команда стартует отложенно по таймеру. Связь между ними диалогом и командой через signal/slot.
QThread::sleep(100); тогда так лучше не делать
да public забыл (как обычно), исправил
Да Qt 4 это C++98. И линакс просто С... И чем линакс плох?
В С++ 98 абстрактные классы есть, без лямбд мы обойдемся, R-value тоже не горит.
Но главное, без Qt5,6,7,8 можно прекрасно жить.
Но ведь работает? Я лично привык и мне не мешает (вроде бы)
Можно еще 3.11 вспомнить, учится никогда не навредит. Дело в удобстве, кто к чему привык и новых возможностях. Для меня Qt5 это не новые возможности, это больше новый гемморой.
Это кому как. Для меня в данном случае это реально панацея от лишних проблем.
фигню можно скачать (если интересно) с https://github.com/PavelDorofeev/How-to-indicating-and-logging-long-process-in-single-thread (ссылку подправил).
Если не интересно можно не скачивать.
А куда торопиться? Вы вызываете slot один раз, потом идет процесс 1,2,3 секунды к примеру. А вы боретесь за миллисекунды (или даже за микросекунды), зачем?
Соглашусь, но это не принципиально, можно как угодно реализовать и не на QLabel.
Спасибо, исправил
QVariant удобен свой универсальностью. Для одних объектов (вызывая их слот) вы возвращаете один тип (класс 1), для других объектов другой тип (класс 2) и т.д. Но функция у вас на все времена одна (call_slot), к тому же статическая (удобно вызывать из любого файла cpp). Вот к примеру, если я хочу применить окно индикации я вызываю слот у объекта примерно так:
передаю параметры, получаю результат в retVal.
Мне кажется отстал больше - лет на 14.
Но тут такой нюанс, что Qt 4 я довольно хорошо изучил (по исходникам если говорить).
Сделал свое развитие некоторых классов (QpTableView и т.д.), то есть добавил новый функционал.
А что в Qt 5, там все по прежнему (в части QtSql например), там все на уровне 2010г. Ну собственно сколько ждать-то еще...
Мне нравится ваш подход, спасибо за статью.
Лично я больше смотрю в сторону выноса части функционала на сервер. По мне так проще на начальном этапе.
Да именно так и сделал в итоге и все вынес из исходников наружу. Все теперь нормально собирается вне исходников, то есть штатно, удобно и т.д.
Там есть несколько переменных типа offset (по цепочке у родителя QSrollArea... чего-то там), offset используется при скроллинге например у QTableView.
Тут я с одной стороны понимаю, это для того чтобы иметь возможность переписывать приватные классы как угодно, чтобы пользователь библиотек даже не заметил этого.
С другой стороны у QScrollAreaPrivate признак экспорта есть, то есть пользователь имеет доступ к его приватным методам извне. А у QAbstractItemView экспорта нет. Как-то не последовательно получается....
Единственно может имеется ввиду, что приватный интерфейс QAbstractItemViewPrivate надо понимать как на стадии разработки, то есть не устоявшийся, на стадии тестирования.
Тогда интересно как в Qt5,6 он тоже всё ещё на стадии тестирования?
Проверили и разобрались. Оказалось, что QAbstractScrollArea свой реализовывать не надо, т.к. он и его приватный друг экспортируемый.
Таким образом для свободного (удобного) распространения QpTableView достаточно тащить с собой только свой QpAbstractItemView и более ничего не надо.
Вот проект на github.com
Короче проверил, оказывается действительно надо добавлять в свой проект клон QAbstractItemView (мы его преобразуем, с позволения Qt, в QpAbstractItemView) и далее все будет прекрасно собираться вне исходников Qt (то есть исходники Qt более не трогаем).
Проект уже обновлен на гитхабе (с версии 2.x.x уже можно качать и собирать в своих проектах)
https://github.com/PavelDorofeev/How-to-create-own-QTableView-with-new-capabilities
Всем успехов!
Хорошая новость:
Q_GUI_EXPORT QAbstractScrollAreaPrivate это означает, что можно слепить свой QAbstratcItemView, а вот QAbstractScrollArea уже свой делать НЕ придется(методы его приватного класса как и его самого конечно-же ЭКСПОРТИРУЕМЫЕ).
Кстати далее по цепочке так:
class QFramePrivate : public QWidgetPrivate
class Q_GUI_EXPORT QWidgetPrivate : public QObjectPrivate
class Q_CORE_EXPORT QObjectPrivate : public QObjectData
Интересно как в Qt5,Qt6 с этим...