Dec. 21, 2016, 7:21 a.m.

Удаление записи из БД (Qml ListView)

ListView, QML

На основе урока “База данных SQLite и работа с ней в QML Qt” делаю проект с представлением данных в ListView. Уперся в удалении записи из списка, точнее в получении индекса(Id) выбранного элемента. При выборе (подсветке) элемента кликом мыши значение view.currentIndex соответствует выбранному, но при передаче в getId удаляется всегда первый элемент. В чем моя ошибка? Поправьте пожалуйста.

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
Item {
    id: item1    
    RowLayout {
        anchors.fill: parent
        Rectangle {
            id: rec1
            z:1
            anchors.left: parent.left            
            anchors.top: parent.top            
            height: item1.height
            width: 300
            color: "white"
            border.width: 2
            border.color: "#353637"
            Row{
                id: row1
                anchors.left: rec1.left
                anchors.leftMargin: 5
                anchors.right: rec1.right
                anchors.rightMargin: 5
                anchors.top: rec1.top
                anchors.topMargin: 5
                height: 40
                spacing: 5
                TextField {
                    id: tf1
                    width: 200
                    placeholderText: "Идентификатор"
                    font.pixelSize: 20
                }
                Button {
                    width: rec1.width - tf1.width - 15
                    highlighted: true
                    Text {
                        id: name1
                        text: qsTr("Поиск")
                        font.family: "Arial"
                        font.bold: true
                        color: "white"
                        font.pixelSize: 20
                        anchors.horizontalCenter: parent.horizontalCenter
                        anchors.verticalCenter: parent.verticalCenter
                    }
                }
            }
            /* Область списка */
            Rectangle {
                id: rec2
                color: "white"
                border.width: 1
                border.color: "#353637"
                width: rec1.width - 10
                anchors.left: rec1.left
                anchors.leftMargin: 5
                anchors.top: row1.bottom
                anchors.topMargin: 5
                anchors.bottom: row2.top
                anchors.bottomMargin: 5
                Flickable {
                    id: view
                    width: list.width
                    anchors.fill: parent
                    contentWidth: list.width
                    ListView {
                        id: list
                        width: rec2.width
                        height: rec2.height
                        anchors.fill: parent
                        model: QueryModel1
                        delegate: numberDelegate
                        focus: true
                        headerPositioning: ListView.OverlayHeader
                        spacing: 1
                        highlight: Rectangle {
                            id: svet
                                    z: -3
                                    y: list.currentItem.y;
                                    Behavior on y { SpringAnimation { spring: 2; damping: 0.1 } }
                                    color: "#1E90FF"
                        }
                                highlightFollowsCurrentItem: true
                                highlightMoveDuration : 100
            }
                    Component {
                        id: numberDelegate
                        RowLayout {
                            id: wrapper
                            property int number: index
                            width: ListView.view.width
                            height: 40
                            //anchors.topMargin: 300
                            z: -1
                            property var view: ListView.view
                            property var isCurrent: ListView.isCurrentItem
                            Rectangle {
                                id: rec3
                                MouseArea {
                                    id: mouse
                                    anchors.fill: parent
                                    onClicked: view.currentIndex = model.index                                                }
                                z: -4
                                width: parent.width
                                height: 40
                                color: "transparent"
                                border.color: "#353637"
                                Text {
                                    anchors.centerIn: parent
                                    font.pixelSize: 20
                                    text: Identifikator
                                }
                                Text {
                                    id: text1
                                    font.pixelSize: 10
                                    text: view.currentIndex
                                }
                            }
                        }
                    }
                transitions: Transition {
                    NumberAnimation { properties: "opacity"; duration: 400 }
                }
            }
            }
            Row {
                id: row2
                anchors.left: rec1.left
                anchors.leftMargin: 5
                anchors.right: rec1.right
                anchors.rightMargin: 5
                anchors.bottom: rec1.bottom
                anchors.bottomMargin: 5
                height: 40
                spacing: 5
                Button {                    
                    highlighted: true
                    width: row2.width / 3 - 10 / 3
                    Text {
                        id: name2
                        text: qsTr("Создать")
                        font.family: "Arial"
                        font.bold: true
                        color: "white"
                        font.pixelSize: 12
                        anchors.horizontalCenter: parent.horizontalCenter
                        anchors.verticalCenter: parent.verticalCenter
                    }
                    onClicked: {
                        var component = Qt.createComponent("BazaOborudovaniaCreat.qml")
                        var window    = component.createObject(rec0)
                        window.show()
                    }
                }
                Button {                    
                    highlighted: true
                    width: row2.width / 3 - 10 / 3
                    Text {
                        id: name3
                        text: qsTr("Редактировать")
                        font.family: "Arial"
                        font.bold: true
                        color: "white"
                        font.pixelSize: 12
                        anchors.horizontalCenter: parent.horizontalCenter
                        anchors.verticalCenter: parent.verticalCenter
                    }
                }
                Button {                    
                    highlighted: true
                    width: row2.width / 3 - 10 / 3
                    Text {
                        id: name4
                        text: qsTr("Удалить")
                        font.family: "Arial"
                        font.bold: true
                        color: "white"
                        font.pixelSize: 12
                        anchors.horizontalCenter: parent.horizontalCenter
                        anchors.verticalCenter: parent.verticalCenter
                    }                    
                    onClicked: {
                        database.removeRecord(QueryModel1.getId(view.currentIndex)) // Почему-то удаляется первый элемент списка
                        QueryModel1.updateModel();
                    }
                }
            }
        }
Rectangle {
    id: rec0
    anchors.left: rec1.right
    anchors.top: parent.top
    anchors.right: parent.right
    height: item1.height
    SwipeView {
        id: swipeView
        anchors.fill: parent
        currentIndex: tabBar.currentIndex
        BazaOborudovania1 {
        }
        BazaOborudovania2 {
        }
        BazaOborudovania3 {
        }
        BazaOborudovania4 {
        }
    }
        TabBar {
        id: tabBar
        height: 40
        anchors.bottom: parent.bottom
        anchors.right: parent.right
        anchors.rightMargin: 0
        anchors.left: parent.left
        anchors.leftMargin: 0
        currentIndex: swipeView.currentIndex
        TabButton {
            text: qsTr("Общие данные")
            font.pixelSize: 15
            font.family: "Arial"
            font.bold: true
        }
        TabButton {
            text: qsTr("Критерии")
            font.pixelSize: 15
            font.family: "Arial"
            font.bold: true
        }
        TabButton {
            text: qsTr("Подшипники")
            font.pixelSize: 15
            font.family: "Arial"
            font.bold: true
        }
        TabButton {
            text: qsTr("История измерений")
            font.pixelSize: 15
            font.family: "Arial"
            font.bold: true
        }
    }
    }
    }
}

 

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
3

Добрый день.
Что-то Вы, по-моему, перемудрили с делегатами и этим самым view.currentIndex…

Попробуйте вместо view.currentIdex использовать list.currentIndex

onClicked: {
    database.removeRecord(QueryModel1.getId(list.currentIndex)) 
    QueryModel1.updateModel();
}

 

Евгений, спасибо! Работает. Хотя я точно помню что c list.currentIndex тоже пробовал и удаляло только первый элемент. А сейчас работает. Наверное надо почаще чистить проект.
С QML вообще желательно почаще делать clean Project, а иногда и полностью удалять build.
А то как попало себя ведёт.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Donate

Hello, Dear Users of EVILEG!!!

If the site helped you, then support the development of the site financially, please.

You can do it by following ways:

Thank you, Evgenii Legotckoi

T
Dec. 11, 2019, 4:56 p.m.
Toma

C++ - Тест 003. Условия и циклы

  • Result:50points,
  • Rating points-4
AT
Dec. 10, 2019, 8:06 a.m.
Anastasija Troschenkova

C++ - Test 001. The first program and data types

  • Result:60points,
  • Rating points-1
AT
Dec. 10, 2019, 8:02 a.m.
Anastasija Troschenkova

Qt - Test 001. Signals and slots

  • Result:73points,
  • Rating points1
Last comments
Dec. 9, 2019, 3:41 a.m.
Evgenij Legotskoj

Эта ошибка invalid use of incomplete type ‘class Ui::AnotherWindow’ обычно говорит о том, что не найдено определение класса или структуры. Типичная проблема - не подключён заголовочны…
NB
Dec. 9, 2019, 3:36 a.m.
Nikolaj Batmanov

Ну, не настолько со мной всё полхо...))) Вроде бы. Я ж кнопки отрисовываю.
Dec. 9, 2019, 3:14 a.m.
Evgenij Legotskoj

Добрый день. У вас ui файлов по ходу нет. UI файлы используются для вёрстки в графическом дизайнере.
NB
Dec. 9, 2019, 3:05 a.m.
Nikolaj Batmanov

Здравствуйте! Полностью скопировал ваш пример к себе, чтобы разобраться. А он не хочет запускаться, дает ошибку: invalid use of incomplete type ‘class Ui::AnotherWindow’ ui(new Ui…
Dec. 8, 2019, 7:23 a.m.
Evgenij Legotskoj

У меня здесь есть одна старая статья с примером векторного редактора. Там есть ответы на ваши вопросы. Поизучайте Qt/C++ - Урок 072. Пример векторного редактора на Qt QGraphicsItem, QG…
Now discuss on the forum
Dec. 12, 2019, 11:49 a.m.
qml_puthon_user

Да, с console.log() я разобрался, счётчик ничего не показывает
Dec. 12, 2019, 9:27 a.m.
Evgenij Legotskoj

Добрый день. Вообще Qt Designer это рисовалка формочек. Вы хотите от него больше, чем в нём есть. Максимум, что вы можете сделать, это накидать всю вёрстку в дизайнере, а потом привязыватьс…
MU
Dec. 11, 2019, 8:27 a.m.
Maciej Urmański

Thank you! Now works, and this is solution. num_embed = Embed.objects.filter(added_by=recipe.added_by).count()
Dec. 11, 2019, 8:12 a.m.
Mihailll

Так работает. Взял этот пример https://api-2d3d-cad.com/face_recognition_with_opencv/ void MainWindow::on_pushButton_4_clicked() //фото определение лица{ // Load Face cascade (.xml…
TD
Dec. 10, 2019, 4:14 a.m.
Timur Dosov

Спасибо, работает. А ещё вопрос: как загрузить страницу с динамической подгрузкой контента по скроллингу? Например - [https://ntvplus.ru/tv/]. Пока делаю через костыль - QApplication::s…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB