Просмотр сообщений
|
Страниц: 1 2 [3] 4 5 ... 142
|
32
|
Qt / 2D и 3D графика / Re: как оформить выбор и нажатие 3d объекта?
|
: Август 31, 2021, 10:05
|
Я подобную задачу решаю на плюсовом коде. Клик пользователя преобразую в линию, ищу пересечение этой линии с параллелепипедами, которые описывают объекты. Если таких больше 1, то ищу пересечения с треугольниками в объектах
|
|
|
34
|
Qt / Model-View (MV) / Как рисовать комбобокс в таблице, чтобы он реагировал на события мыши
|
: Август 20, 2021, 09:32
|
Всем привет! У меня установлена собствення фабрика редакторов. Сейчас имею такой метод рисования: C++ (Qt) void CommonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { std::unique_ptr<QWidget> editor {QStyledItemDelegate::createEditor(nullptr, option, index)}; if (auto *comboBox = dynamic_cast<QComboBox *>(editor.get())) { auto opt = option; initStyleOption(&opt, index); comboBox->setEnabled(index.flags() & Qt::ItemIsEditable); QStyleOptionComboBox cmbOpt; cmbOpt.initFrom(comboBox); cmbOpt.rect = opt.rect; cmbOpt.currentText = opt.text; const auto decoration = index.model()->data(index, Qt::DecorationRole); if (decoration.type() == QVariant::Icon) { cmbOpt.currentIcon = decoration.value<QIcon>(); cmbOpt.iconSize = comboBox->iconSize(); } QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &cmbOpt, painter); QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &cmbOpt, painter); return; } return QStyledItemDelegate::paint(painter, option, index); }
Комбо в таблицу выводится, но вот он какой-то не живой. Обычно виджет как-то реагирует на наведение мыши, на покидание мыши виджета. Интересно, как можно было бы достичь такого же эффекта не сильно много внося изменений в текущий код Пока что видится решение - наследоваться от AbstractView и связывать события мыши с делегатом + использовать какие-то флаги рисования. Но может есть что-то попроще? Я ещё рассматривал вариант QAbstractItemView::setIndexWidget, но кажется, что он достаточно геморойный для меня, т.к. для отображения используется 3 класса моделей: фильтрующая->модель-массив однотипных моделей->модель элемент массива
|
|
|
35
|
Qt / Общие вопросы / Re: Ваше мнение о былом, сущем и будущем
|
: Июль 23, 2021, 19:59
|
А я радуюсь от msys2. Там относительно свежие пакеты, mingw, qt, сейчас ещё и сборочки clang, вроде, подвозят - ещё предстоит поизучать мне этот вопрос. По идее можно настроить систему с использованием интернета и зазиповать. Либо, думаю, можно отдельно скачать инсталлятор и отдельно пакеты и оффлайн понаустанавливать их
|
|
|
37
|
Qt / Многопоточное программирование, процессы / thread sanitizer
|
: Февраль 03, 2021, 23:39
|
Всем привет! Крайне мало работал с многопоточностью и детектом ошибок В моём qt приожении преимущественно используется omp на циклах for. Имеется 1 std::async, который работает пока парсится файл при открытии, а основной поток прогресс отображает Скомпилил с thread sanitizer и получил неясный результат (аттач) Не понимаю, в чём проблема, halp! Место создания Т9: AboutDlg создаётся на стэке в MainWindow, который как родитель передаётся в списке инициализации конструктора. Место создания Т19: функция, которая вызывается конструктором MainWindow, конкретная строчка: connect(ui->openGeometryAct, &QAction::triggered, [this]{openGeometryFile();}); В openGeometryFile() вызывается std::async, но предупреждение возникает и тогда, когда программа ниразу эту функцию не дёргает Как интерпретировать диагностику? archlinux clang version 11.0.1 extra/qt5-base 5.15.2-3 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=thread -O0")
|
|
|
40
|
Qt / 2D и 3D графика / Цветная кривая (qwt)
|
: Январь 16, 2021, 12:40
|
Всем привет! Столкнулся с проблемой, что нужно вывести кривую (непрерывную), которая раскрашивается по её протяжённости Кривая строится из набора примитивов: линий и дуг. Правила раскрашивания задаются как протяжённость(мм), цвет
Реализовал так: если примитив нужно красить в 2 цвета, то разбиваю примитив на 2 и каждому назначаю цвет Во вложении пример работы
Проблема в том, что в точке 0 по высоте должен происходить цветовой переход, а из-за того что я использую толщину кисти 10 происходит наложение цвета над высотой 0...
Из идей имеется такая: в качестве кисти расчитывать и задавать градиент (линейный, конический) Не знаю, взлетит ли идея. Может есть решение проще?
|
|
|
43
|
Программирование / С/C++ / Re: Адресная арифметика
|
: Январь 14, 2021, 22:02
|
Примерно так вижу C++ (Qt) MaterialPtr Model::advancedMaterial(MaterialPtr base, int offset) { auto pos = std::find(m_Materials, m_Materials + m_MaterialCount, base); return pos + offset; };
|
|
|
|
|