Как стать автором
Обновить
5
13
Павел @kkmspb

девелопер cpp

Отправить сообщение

KJob вам в помощь

А вы KJob использовали в Qt проектах? Я как-то первый раз об этом слышу.

Вы, видимо, никогда не писали приложений с более-менее сложным UI

Да и не планирую пока

Уже есть Qt6

Скоро 7 будет, тут нельзя останавливаться

Зачем вам свой 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 он тоже всё ещё на стадии тестирования?

Информация

В рейтинге
487-й
Откуда
Парголово, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Fullstack Developer
Senior
От 250 000 ₽
OOP
Database
MySQL
PHP
C++
Programming microcontrollers
Qt
Software development
Development of drivers
C