Pull to refresh
3
0
Павел @kkmspb

фулстек разработчик С, С++,PHP,JS

Send message

Зачем вам свой single shot таймер?

Если вы обратили внимание:

    if ( ! connect ( tmr , SIGNAL(sig_retResult(bool, QVariant)),
                          this , SLOT(slot_retResult(bool, QVariant))) )

таймер возвращает результат в окно (индикации). Этим стандартный не устроил.

Зачем вам QVariant?

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

KJob вам в помощь

Спасибо конечно. KDE конечно интересно как вариант. Но блин билдить kde исходники пока не готов. На будущее конечно посмотрим и Akonadi в.т.ч. Кстати я под виндой если что.

Не превращайте ресурс в УГ

Ну извините, если задел ваше что-то.
Может кому из новичков все-таки полезно будет.
А "диалог окно на qt" я проверял по интернету и не раз. Тут же не речь о том как вывести диалоговое окно.

Хм, то есть обернули вызов слота в диалог?

В принципе да. Но команду можно запускать и вне диалога. Сама команда стартует отложенно по таймеру. Связь между ними диалогом и командой через signal/slot.

чтобы не фризить UI

QThread::sleep(100); тогда так лучше не делать

Похоже не исправили, по прежнему 404

да public забыл (как обычно), исправил

 Qt4 это c++98, даже не c++03

Да Qt 4 это C++98. И линакс просто С... И чем линакс плох?
В С++ 98 абстрактные классы есть, без лямбд мы обойдемся, R-value тоже не горит.
Но главное, без Qt5,6,7,8 можно прекрасно жить.

сигналы-слоты в Qt4 так вообще на макросах и строках

Но ведь работает? Я лично привык и мне не мешает (вроде бы)

использовать Qt4 сейчас это примерно как начинать учиться программировать под windows 98

Можно еще 3.11 вспомнить, учится никогда не навредит. Дело в удобстве, кто к чему привык и новых возможностях. Для меня Qt5 это не новые возможности, это больше новый гемморой.

С QVariant не удобно работать

Это кому как. Для меня в данном случае это реально панацея от лишних проблем.

И НЕ пишите статьи (и заметки) больше об этой фигне, пожалуйста.

фигню можно скачать (если интересно) с https://github.com/PavelDorofeev/How-to-indicating-and-logging-long-process-in-single-thread (ссылку подправил).

Если не интересно можно не скачивать.

Вызов слота по имени - это очень медленно

А куда торопиться? Вы вызываете slot один раз, потом идет процесс 1,2,3 секунды к примеру. А вы боретесь за миллисекунды (или даже за микросекунды), зачем?

Использовать QLabel да еще и rich text для логов - зло

Соглашусь, но это не принципиально, можно как угодно реализовать и не на QLabel.

404 по ссылке на гитхаб.

Спасибо, исправил

Из текста непонятно зачем там вообще QVariant, invokeMethod

QVariant удобен свой универсальностью. Для одних объектов (вызывая их слот) вы возвращаете один тип (класс 1), для других объектов другой тип (класс 2) и т.д. Но функция у вас на все времена одна (call_slot), к тому же статическая (удобно вызывать из любого файла cpp). Вот к примеру, если я хочу применить окно индикации я вызываю слот у объекта примерно так:

    QVariant retVal;

    qp_gui::call_slot( this ,

                       appDef::currentKKT_ ,

                       "Открытие смены",

                       QString("Открываем смену \n%1 %2")
                       .arg( ui->rel_cashier->get_LineEdit()->text() )
                       .arg( "" ),

                       "Ждите идет процесс...",

                       "slot_openShift",

                       QList<QObject*>() << appDef::currentKKT_,

                       QList<QVariant>()
                       << ui->rel_cashier->get_LineEdit()->text()
                       << ui->ledt_cashierInn->text(),

                       retVal

                       );

Check_Result chkRes = Check_Result::fromVariant( retVal );

передаю параметры, получаю результат в retVal.

Вы отстали от жизни лет на 9

Мне кажется отстал больше - лет на 14.
Но тут такой нюанс, что Qt 4 я довольно хорошо изучил (по исходникам если говорить).
Сделал свое развитие некоторых классов (QpTableView и т.д.), то есть добавил новый функционал.
А что в Qt 5, там все по прежнему (в части QtSql например), там все на уровне 2010г. Ну собственно сколько ждать-то еще...

Мне нравится ваш подход, спасибо за статью.

Лично я больше смотрю в сторону выноса части функционала на сервер. По мне так проще на начальном этапе.

QTableView использует QAbstractViewItemPrivate. Для своего же класса, наследованного от QTableView, можете аналогично сделать приватный класс с требуемым функционалом. Аналогично как это и делает сам Qt

Да именно так и сделал в итоге и все вынес из исходников наружу. Все теперь нормально собирается вне исходников, то есть штатно, удобно и т.д.

Просто не совсем понятно, зачем его наследовать то?

Там есть несколько переменных типа 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
Всем успехов!

Хорошая новость:

class Q_GUI_EXPORT QAbstractScrollAreaPrivate: public QFramePrivate

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 с этим...

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