Как вывести combobox динамически, чтоб каждый combobox соответствовал определённому idModel?
ComboBox, qt, QAbstractListModel, qml
Как вывести combobox динамически, чтоб каждый combobox соответствовал определённому idModel? У меня есть ThreeDModelTexture наследник QAbstractListModel, который имеет роли
Код проблеммы
enum ThreeDModelRolse { nameRole = Qt::DisplayRole, idModelRole = Qt::UserRole + 1, urlRole = Qt::UserRole + 2 }; roles[idModelRole] = "idModel"; roles[nameRole] = "name"; roles[urlRole] = "url";
Полностью класс :
threedmodeltexture.h
#ifndef THREEDMODELTEXTURE_H #define THREEDMODELTEXTURE_H #include <QString> #include <QObject> #include <QString> #include <QAbstractListModel> #include <QList> #include <QVariant> #include <QModelIndex> #include "baseqmlabstractlistmodel.h" class Texture; class ThreeDModelTexture: public QAbstractListModel { Q_PROPERTY(int _idModel READ idmodel(int) ) Q_PROPERTY(QString _name READ name(int) ) Q_PROPERTY(QString _url READ url(int) ) public: ThreeDModelTexture(QObject *parent = nullptr); ~ThreeDModelTexture(); enum ThreeDModelRolse { nameRole = Qt::DisplayRole, idModelRole = Qt::UserRole + 1, urlRole = Qt::UserRole + 2 }; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; Q_INVOKABLE int rowCount(const QModelIndex &parent) const; // количество элементов в модели void addTexture(Texture tex)const; Q_INVOKABLE static int Count(); Q_INVOKABLE static int boolMatchSearch(int id); Q_INVOKABLE int idmodel(const int &id); Q_INVOKABLE QString name(const int &id); Q_INVOKABLE QString url(const int &id); public slots: QHash<int, QByteArray> roleNames() const; Q_INVOKABLE static QList<Texture> textures; QHash<int, QByteArray> roles; // роли }; class Texture { public: Texture(int _idModel, QString _name, QString _url) :idModel(_idModel) , name(_name) , url(_url) { // idModel = _idModel; // name = _name; // url = _url; } void setName (QString _name) { name = _name; } void seturl (QString _url) { url = _url; } void setidModel (int _idModel) { idModel = _idModel; } QString getName() const { return name; } QString getUrl() const { return url; } int getIDModel() const { return idModel; } private: int idModel; QString name; QString url; }; #endif // THREEDMODELTEXTURE_H
threedmodeltexture.cpp
#include "threedmodeltexture.h" #include <QDebug> ThreeDModelTexture::ThreeDModelTexture(QObject *parent) : QAbstractListModel(parent) { roles[idModelRole] = "idModel"; roles[nameRole] = "name"; roles[urlRole] = "url"; } QList<Texture> ThreeDModelTexture::textures; ThreeDModelTexture::~ThreeDModelTexture() { } QVariant ThreeDModelTexture::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() > ThreeDModelTexture::textures.count()) return QVariant(); const Texture tex = ThreeDModelTexture::textures[index.row()]; if (role == idModelRole) return tex.getIDModel(); else if (role == nameRole) return tex.getName(); else if (role == urlRole) return tex.getUrl(); return QVariant(); } QHash<int, QByteArray> ThreeDModelTexture::roleNames() const { return roles; } void ThreeDModelTexture::addTexture(Texture tex) const { ThreeDModelTexture::textures << tex; } int ThreeDModelTexture::rowCount(const QModelIndex &parent) const { return ThreeDModelTexture::textures.size(); } int ThreeDModelTexture::Count() { return ThreeDModelTexture::textures.size(); } int ThreeDModelTexture::boolMatchSearch(int id) { for(int i=0; i<ThreeDModelTexture::textures.size();i++) { if (ThreeDModelTexture::textures.at(i).getIDModel()==id) { return i; } else { return -1; } } return -1; } int idmodel(const int &id) { for(int i=0; i<ThreeDModelTexture::textures.size();i++) { if (ThreeDModelTexture::textures.at(i).getIDModel()==id) { return ThreeDModelTexture::textures.at(i).getIDModel(); } else { return -1; } } } QString name(const int &id) { for(int i=0; i<ThreeDModelTexture::textures.size();i++) { if (ThreeDModelTexture::textures.at(i).getIDModel()==id) { return ThreeDModelTexture::textures.at(i).getName(); } else { return ""; } } } QString url(const int &id) { for(int i=0; i<ThreeDModelTexture::textures.size();i++) { if (ThreeDModelTexture::textures.at(i).getIDModel()==id) { return ThreeDModelTexture::textures.at(i).getUrl(); } else { return ""; } } }
main.cpp
создание экземпляров модели:
... ThreeDModels.addThreeDModel(new ThreeDModel("false", 1, "ccc","c")); ThreeDModels.addThreeDModel(new ThreeDModel("false", 3, "aaa","a")); ThreeDModels.addThreeDModel(new ThreeDModel("false", 5, "bbb","b")); TextureModel.addTexture(Texture(1, "masta", "masta.jpg")); TextureModel.addTexture(Texture(3, "aaa", "aaa.jpg")); TextureModel.addTexture(Texture(5, "bbb", "bbb.jpg")); TextureModel.addTexture(Texture(3, "ttt", "ttt.jpg")); view.engine()->rootContext()->setContextProperty("ThreeDM", &ThreeDModels); view.engine()->rootContext()->setContextProperty("TextureM", &TextureModel); view.setSource(QUrl("qrc:/Samples/Analysis/ViewshedGeoElement/ViewshedGeoElement.qml")); ...
ViewshedGeoElement.qml
C1.TableView { anchors.top: rowLayout.bottom anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom id: tableView clip: true sortIndicatorVisible: true currentRow: rowCount ? 0 : -1 model: SortFilterProxyModel { source: ThreeDM.rowCount() > 0 ? ThreeDM : null sortOrder: tableView.sortIndicatorOrder sortCaseSensitivity: Qt.CaseInsensitive sortRole: ThreeDM.rowCount() && tableView.getColumn(tableView.sortIndicatorColumn).role !== "check" > 0 ? tableView.getColumn(tableView.sortIndicatorColumn).role : "" } C1.TableViewColumn { width: 30 role: "check" resizable: false delegate: C1.CheckBox { id: checkBox anchors.left: parent.left anchors.leftMargin: parent.width / 3 checked: model.check onVisibleChanged: if (visible) checked = model.check onClicked: model.check = checked } } C1.TableViewColumn { width: 30 role: "id" title: "id" } C1.TableViewColumn { width: 90 role: "description" title: "description" } C1.TableViewColumn { width: 60 role: "code" title: "code" } C1.TableViewColumn { width: 100 role: "combobox" resizable: false title: "Текстура" delegate: C1.ComboBox { id: comboListTexture model: ListModel { id: comboModel dynamicRoles: true } Component.onCompleted: { reload() } textRole:"name" onActivated: console.log("Combo Box Index Changed To:", index, model.data(model.index(index, 0), Qt.UserRole + 2 )) function reload() { var i = comboListTexture.currentIndex // console.log("TextureM.boolMatchSearch(1)",TextureM.getidmodel(1),TextureM.getname(1),TextureM.geturl(1)) // console.log("TextureM.boolMatchSearch(1)",TextureM._name,TextureM._idModel,TextureM._url) comboListTexture.model = TextureM comboListTexture.currentIndex = i } } } ... style: TableViewStyle { headerDelegate: Rectangle { height: textItem.implicitHeight width: textItem.implicitWidth Text { id: textItem anchors.fill: parent anchors.leftMargin: 6 verticalAlignment: Text.AlignVCenter horizontalAlignment: styleData.textAlignment text: styleData.value } C1.CheckBox { anchors.left: parent.left anchors.leftMargin: parent.width / 3 property bool isPressed: styleData.pressed visible: styleData.column === 0 onIsPressedChanged: { if (isPressed && styleData.column === 0) { checked = !checked for(var i = 0; i < ThreeDM.rowCount(); i++) { ThreeDM.setData(ThreeDM.index(i, 0), checked, "check") } } } } } } } }
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
- Akiv Doros
- 11 ноября 2024 г. 19:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
m
- molni99
- 26 октября 2024 г. 6:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
m
- molni99
- 26 октября 2024 г. 6:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Последние комментарии
Qt/C++ - Урок 065. Соответствие ошибок HTTP ошибкам ответа сервера в QNetworkAccessManager s Midsummer Classic in Kansas City priligy online pharmacy
Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце Many OPKs would advise users to start using the test strips around day 9 of your cycle, considering day 1 to be the first day of full menstrual flow buy priligy australia
Релиз утилиты развертывания С++/Qt и QML приложений CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
Сейчас обсуждают на форуме
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 ноября 2024 г. 11:04
добавить qlineseries в функции priligy for sale Gently flush using an ear syringe
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderChe31 октября 2024 г. 19:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Добрый день
При беглом взгляде на код возникает мысль, что вам нужно в методе onCompleted использовать модифицированную версию функции reload, в которой будет устанавливаться первоначальное состояние комбобоксов в зависимости от наименования объекта, то есть названия aaa, bbb, и т.д. Нужно пройтись в цикле по модели и инициализировать модель.
Либо сделать этот сразу в методе addThreeDModel .
у комбобокса есть ф-я currentText(), сделайте проверку на соответствие, если не сходится, то установите индекс в соответствующую позицию