Size: a a a

2021 January 05

AE

Andrew Evseev in Qt
Всем привет! у меня древовидная модель данных. Число потомков зависит от данных в узле. Наследуюсь от QAbstractItemModel. В методе setData у редактируемой ноды появляются потомки. В QTreeView при этом не появляется "плюсик" для данного узла. Но если нажать на то место, где он должен быть, потомки раскрываются. Если свернуть и развернуть на более высоком уровне, то плюсик появляется. Как сделать, чтобы после редактирования ноды, у нее появлялся плюсик (при появлении потомков)?
источник

SK

Stas Koynov in Qt
Andrew Evseev
Всем привет! у меня древовидная модель данных. Число потомков зависит от данных в узле. Наследуюсь от QAbstractItemModel. В методе setData у редактируемой ноды появляются потомки. В QTreeView при этом не появляется "плюсик" для данного узла. Но если нажать на то место, где он должен быть, потомки раскрываются. Если свернуть и развернуть на более высоком уровне, то плюсик появляется. Как сделать, чтобы после редактирования ноды, у нее появлялся плюсик (при появлении потомков)?
а ты сигнал послал что модель обновилась?
источник

AE

Andrew Evseev in Qt
Stas Koynov
а ты сигнал послал что модель обновилась?
emit dataChanged для данного узла вставлял, но не помогает
источник

AE

Andrew Evseev in Qt
Он не понимает, что помимо данных поменялась структура
источник

SK

Stas Koynov in Qt
Andrew Evseev
emit dataChanged для данного узла вставлял, но не помогает
а если для корня? или пофиг?
источник

AE

Andrew Evseev in Qt
Stas Koynov
а если для корня? или пофиг?
Для корня не пробовал, но ведь меняется только узел и у него дети появляются
источник

SK

Stas Koynov in Qt
Andrew Evseev
Для корня не пробовал, но ведь меняется только узел и у него дети появляются
ну хз я просто пальцем в небо. жди более опытных, я с гуями раз в год минут 15 работаю :)...
источник

AE

Andrew Evseev in Qt
Stas Koynov
ну хз я просто пальцем в небо. жди более опытных, я с гуями раз в год минут 15 работаю :)...
Я предполагаю, что emit dataChanged сообщает только о новых данных этого узла, а меняется структура
источник

AE

Andrew Evseev in Qt
Помогло emit layoutToBeChanged и layoutChanged для данного узла.
источник

SK

Stas Koynov in Qt
ну вот даже разговор со мной (который нифига не понимает в гуи) тебе помог :). Эффект уточки сработал! возьми на заметку :)
источник

AE

Andrew Evseev in Qt
Ага, спасибо тебе! Я примерно на это и рассчитывал)
источник

КГ

Константин Громов... in Qt
Добрый вечер, подскажите, пожалуйста, что делает метод create класса QThread?
Насколько я понимаю, что это некий аналог сигнал-слотового взаимодействия, который связывает функцию и поток?

Прошу прощения за глупый вопрос, но в документации по этому методу написано:

the caller acquires ownership of the returned QThread instance

QThread instance

Что это означает?

Спасибо!!
источник

ИФ

Имя Фамилия... in Qt
Михаил Серебренников
У QML достаточно простой и нестрогий синтаксис, и это развращает и приводит к говнокоду. Поэтому важно соблюдать соглашение о стиле кода. Я придерживаюсь следующим правилам.

Очерёдность при описании элемента
1. id (если нужен);
2. объявление новых property и signal;
3. установка значений существующих property:
   3.1 text, source, sourceComponent (как самые главные свойства);
   3.2 все остальные свойства;
   3.3 x,y,width,height,anchors;
   3.4 Behavior
4. QML-элементы (наследники Item и QtObjects);
5. states и transitions;
5. слоты и обработка сигналов (onClicked, Connections), но кроме Component.onCompleted и Component.onDestruction;
6. функции;
7. Component.onCompleted и Component.onDestruction.

Обработка создания и разрушения элемента (пункт 7) перенесена в конец, т.к. это очень важный и часто используемый кусок кода. Вставляю пробельные строки между элементами, id, блоком свойств и т.д.
Если блочные свойства (anchors, fonts и др.) содержат больше двух строк, то описываю через фигурные скобки. Оформление тернарного оператора - дело вкуса, но я стараюсь разбивать на три строки.

Файловая структура
Fonts/
   SomeFont.ttf
   Fonts.qrc
Images/
   SomeImage.svg
   Images.qrc
QML/
   Components/
       SomeComponent.qml
       qmldir
   JavaScript/
       SomeJsTool.js
   Pages/
       Page1/
           ComponentForPage1.qml
           qmldir
       Page1.qml
       Page2.qml
       qmldir
   Main.qml
   Consts.qml
   Colors.qml
   qmldir
   Qml.qrc
Translations/
   Project_ru_RU.ts
   Project_ru_RU.qm
   Translations.qrc

По требованию Qt qml-файлы должны начинаться с заглавной буквы. Поэтому для единообразия я остальные файлы и каталоги (кроме qmldir) также задаю в CamelCase. Но это дело вкуса. Также важно, чтобы название файла и id в его описании совпадал.

Модули и import
Свои QML-файлы можно оформлять в виде модулей через qmldir. Также можно просто в import писать относительный путь (import "../../Components") до нужно каталога или абсолютный путь (import "qrc:/Components"). Моя практика показала, что если не писать библиотеку для сторонних людей, то лучше не использовать qml-модули. Т.к. и без них всё работает без конфликтов, и при этом не тратиться куча времени на дублировании имени файла в qmldir.

С++ и QML
Тут всё просто. В C++ должно быть вынесено максимум бизнес-логики. А её выполнение не должно блокировать GUI-поток.
Ваша структура идеально подходит для моего проекта.
Чувствую прилив сил! Наконец разберу свой беспорядок и продолжу работать :)

Спасибо за подробное объяснение
источник

SK

Stas Koynov in Qt
Константин Громов
Добрый вечер, подскажите, пожалуйста, что делает метод create класса QThread?
Насколько я понимаю, что это некий аналог сигнал-слотового взаимодействия, который связывает функцию и поток?

Прошу прощения за глупый вопрос, но в документации по этому методу написано:

the caller acquires ownership of the returned QThread instance

QThread instance

Что это означает?

Спасибо!!
там же черным по белому написано, ты чего чувак? Создает Обьект потока, возвращает на него указатель. принимает функцию и аргументы. Это фабричный метод
источник

КГ

Константин Громов... in Qt
Stas Koynov
там же черным по белому написано, ты чего чувак? Создает Обьект потока, возвращает на него указатель. принимает функцию и аргументы. Это фабричный метод
Просто какой смысл этого метода, если можно обычным connect это сделать?
источник

SK

Stas Koynov in Qt
Константин Громов
Просто какой смысл этого метода, если можно обычным connect это сделать?
какой коннект ты о чем?
ты создал ПОток. в этом потоке будет выполняться твоя (переданная) функция. в нее будут переданы аргументы, если ты их передал. Поток нужно будет потом стартануть при помощи метода старт
источник

A

Artem in Qt
Подскажите, пожалуйста, как для cmake подключить zlib?
источник

JS

Jerzy Syrowiecki in Qt
Artem
Подскажите, пожалуйста, как для cmake подключить zlib?
первый ответ в яндексе https://stackoverflow.com/a/53298568/1266963
источник

NM

Nastya Medveda in Qt
Добрый вечер, Я хочу поменять иконку в ячейке   QTableView/QAbstractTableModel.

Скажите, пожалуйста, как  обновить QDecorationRole  не меняя содержимое  таблицы?
В документации вQAbstractTableModel  нашла только insert/remove, но не update.
источник

SK

Stas Koynov in Qt
Nastya Medveda
Добрый вечер, Я хочу поменять иконку в ячейке   QTableView/QAbstractTableModel.

Скажите, пожалуйста, как  обновить QDecorationRole  не меняя содержимое  таблицы?
В документации вQAbstractTableModel  нашла только insert/remove, но не update.
мы не подсказываем тому, у кого нет аватарки или фотки!
источник