АЧ
Алексей ЧепрасовJune 27, 2016, 12:58 p.m.

Передача данных из комбобокса в строку ввода в QML

TextField, qml, ComboBox

Всем привет. Нужно передать выбранный элемент комбобокса в строку ввода текста, к примеру в “наименование товара”
Код файла с таблицей

import QtQuick 2.3
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.2
 
ApplicationWindow {
    id:table1
    visible: false
    width: 1700
        height: 700
        title: qsTr("Панель администратора")
        Text{
            x:300
        text: ""
        }
 
 
        Button {
            id: button
            text: qsTr("Выход")
            anchors.top: parent.top
            anchors.topMargin: 5
            anchors.left: parent.left
            anchors.leftMargin: 5
 
            onClicked: {table1.visible=false
 
            }
        }
 
        /* TabView, в первой вкладке которого находится кнопка,
         * по нажатию кнопки которой из изменится текст в первой кнопке
         */
        TabView {
            id: tabView
            anchors.top: button.bottom
            anchors.topMargin: 5
            anchors.left: parent.left
            anchors.right: parent.right
            anchors.bottom: parent.bottom
 
            Tab {
                id: tab1
                title: qsTr("Товары")
 
 
                component: Item {
                    id: rect1
 
 
                }
                Rectangle{visible: true
                    width: 1600
                    height: 480
 
 
                    // Слой с TaxtField`ами и Button для занесения записей в базу данных
                    RowLayout {
                        id: rowLayout
                        anchors.top: parent.top
                        anchors.left: parent.left
                        anchors.right: parent.right
                        anchors.margins: 5
 
                        spacing: 10
                        Text {text: qsTr("Наименование товара")}
                        TextField {id: fnameField
                            
 
 
                        }
                        Text {text: qsTr("Категория")}
                        TextField {id: kategoryField}
                        Text {text: qsTr("Прибыло")}
                        TextField { id: snameField}
                        Text {text: qsTr("Убыло")}
                        TextField { id: ubylField}
                        Text {text: qsTr("Номер стеллажа")}
                        TextField {id: nikField}
                        Text {text: qsTr("Номер полки")}
                        TextField {id: numberpolkField}
 
 
                        Button {
                            id: pusto
 
 
                            text: qsTr("Добавить")
 
                            // Вносим новую запись в базу данных
                            MouseArea{
                                anchors.fill: parent
                            onClicked: {
 
                                if (fnameField.text=="" || snameField.text=="" || ubylField.text=="" || nikField.text=="" || numberpolkField.text=="" || kategoryField.text=="")
 
                                {
                                     contextMenu2.popup()
                                }
 
                                if(kategoryField.text=="Овощи" ||kategoryField.text=="овощи"||kategoryField.text=="Фрукты"||kategoryField.text=="фрукты")
                              {
                                    database.inserIntoTable( fnameField.text , kategoryField.text, snameField.text, ubylField.text, nikField.text, numberpolkField.text)
                                    myModel.updateModel() // И обновляем модель данных с новой записью
 
                                }
                                  else
                                contextMenu3.popup()
                            }
                            }
                        }
                        Button {
                                    text: qsTr("Экспорт в Excel")
 
                                    // Запускаем экспорт
                                    onClicked: {
                                        myModel.exportCSV()
                                    }
                                }
                    }
 
                    TableView {
                        id: tableView
                        anchors.top: rowLayout.bottom
                        anchors.left: parent.left
                        anchors.right: parent.right
                        anchors.bottom: parent.bottom
                        anchors.margins: 5
 
 
                        TableViewColumn {
                            role: "date"
                            title: "Дата"
                        }
                        TableViewColumn {
                            role: "time"
                            title: "Время"
                        }
                        TableViewColumn {
                            role: "fname"
                            title: "Наименование товара"
                        }
                        TableViewColumn {
                            role: "kategory"
                            title: "Категория"
 
                        }
                        TableViewColumn {
                            role: "sname"
                            title: "Прибыло"
                        }
                        TableViewColumn {
                            role: "ubyl"
                            title: "Убыло"
                        }
                        TableViewColumn {
                            role: "nik"
                            title: "Номер стеллажа"
                        }
                        TableViewColumn {
                            role: "numberpolk"
                            title: "Номер полки"
                        }
 
                        model: myModel
 
                        // Настройка строки в TableView для перехавата левого клика мыши
                        rowDelegate: Rectangle {
                            anchors.fill: parent
                            color: styleData.selected ? 'skyblue' : (styleData.alternate ? 'whitesmoke' : 'white');
                            MouseArea {
                                anchors.fill: parent
                                acceptedButtons: Qt.RightButton | Qt.LeftButton
                                onClicked: {
                                    tableView.selection.clear()
                                    tableView.selection.select(styleData.row)
                                    tableView.currentRow = styleData.row
                                    tableView.focus = true
 
                                    switch(mouse.button) {
                                    case Qt.RightButton:
                                        contextMenu.popup() // Вызываем контексткное меню
                                        break
                                    default:
                                        break
                                    }
                                }
                            }
                        }
                    }
 
                    // Контекстно меню предлагает удаление строки из базы данных
                    Menu {
                        id: contextMenu
 
                        MenuItem {
                            text: qsTr("Удалить")
                            onTriggered: {
                                /* Вызываем диалоговое окно,
                                 * которое уточнит намерение удалить строку из базы данных
                                 * */
                                dialogDelete.open()
                            }
                        }
                    }
 
                    // Диалог подтверждения удаления строки из базы данных
                    MessageDialog {
                        id: dialogDelete
                        title: qsTr("Удаление записи")
                        text: qsTr("Подтвердите удаление записи со склада")
                        icon: StandardIcon.Warning
                        standardButtons: StandardButton.Ok | StandardButton.Cancel
 
                        // При положительном ответе ...
                        onAccepted: {
                            /* ... удаляем строку по id,
                             * который забираем из модели данных
                             * по номеру строки в представлении
                             * */
                            database.removeRecord(myModel.getId(tableView.currentRow))
                            myModel.updateModel();  // Обновляем модель данных
                        }
                    }
 
                    //Всплывающее окно если строка ввода текста пустая
                    Menu {
                        id: contextMenu2
 
                        MenuItem {
                            text: qsTr("Что - то пошло не так :С")
                           onTriggered:    {
 
                                dialogNULL.open()
                                            }
                        }
                    }
 
                    // Диалог подтверждения удаления строки из базы данных
                    MessageDialog {
 
                        id: dialogNULL
                        title: qsTr("Одна или несколько строк не заполнены")
                        text: qsTr("Проверьте, все ли строки заполнены и добавте запись в таблицу")
                        icon: StandardIcon.Warning
                        standardButtons: StandardButton.Ok | StandardButton.Cancel
 
                        // При положительном ответе ...
                        onAccepted: {
                            dialogNULL.visible=false
                        }
                    }
 
 
                    Menu {
                        id: contextMenu3
 
                        MenuItem {
                            text: qsTr("Аяяй :С")
                           onTriggered:    {
 
                                dialogOvosh.open()
                                            }
                        }
                    }
 
 
                    MessageDialog {
 
                        id: dialogOvosh
                        title: qsTr("Склад овощей!!!")
                        text: qsTr("На складе нельзя хранить что - то, кроме овощей и фруктов")
                        icon: StandardIcon.Warning
                        standardButtons: StandardButton.Ok | StandardButton.Cancel
 
                        // При положительном ответе ...
                        onAccepted: {
                            dialogOvosh.visible=false
                        }
                    }
 
                    ComboBox {
                        x:100
                        y:300
                        editable: true
                        model: ListModel {
                            id: model
                            ListElement { text: "Banana"; color: "Yellow" }
                            ListElement { text: "Apple"; color: "Green" }
                            ListElement { text: "Coconut"; color: "Brown" }
                        }
                        onAccepted: {
                            if (find(currentText) === -1) {
                                model.append({text: editText})
                                currentIndex = find(editText)
                                fnameField.insert(currentIndex)
 
                            }
                        }
                    }
 
                }
 
            }
 
        }
 
 
 
}

 

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.

Do you like it? Share on social networks!

3
Evgenii Legotckoi
  • June 27, 2016, 1:30 p.m.

Добрый день.
Можно реализовать это через обработчик сигнала комбобокса onCurrentTextChanged, то есть

ComboBox {
    onCurrentTextChanged: {
        fnameField.text = currentText; // Это будет как раз текущий текст в комбобоксе         
    }
}

Но учитывая, что каждый элемент модели состоит из двух полей, то правильнее будет сделать следующим образом.

import QtQuick 2.6
import QtQuick.Controls 1.5
 
ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
 
    ComboBox {
        x:50
        y:50
        editable: true
 
        model: ListModel {
            id: model
            ListElement { text: "Banana"; color: "Yellow" }
            ListElement { text: "Apple"; color: "Green" }
            ListElement { text: "Coconut"; color: "Brown" }
        }
 
        onCurrentIndexChanged: {
            fnameField.text = model.get(currentIndex).text
        }
    }
 
    TextField {
        id: fnameField
        x: 50
        y: 80
   }
}

 

    для улучшения внешнего вида у TextField добавляем параметр visible: false

    TextField {
               visible: false
            id: fnameField
            x: 50
            y: 80
       }

     

      Evgenii Legotckoi
      • June 27, 2016, 1:46 p.m.
      • The answer was marked as a solution.

      для улучшения внешнего вида у TextField добавляем параметр visible: false

      Тогда уж лучше вообще избавиться от этого лишнего элемента.
      Ведь можно же забирать данные из комбобокса и передавать их куда следует.

      import QtQuick 2.6
      import QtQuick.Controls 1.5
       
      ApplicationWindow {
          visible: true
          width: 640
          height: 480
          title: qsTr("Hello World")
       
          ComboBox {
              id: comboBox
              x:50
              y:50
              editable: true
       
              model: ListModel {
                  id: model
                  ListElement { text: "Banana"; color: "Yellow" }
                  ListElement { text: "Apple"; color: "Green" }
                  ListElement { text: "Coconut"; color: "Brown" }
              }
       
              onCurrentIndexChanged: {
                  fnameField.text = model.get(currentIndex).text
              }
          }
       
          TextField {
              id: fnameField
              x: 50
              y: 80
         }
       
          Button {
              x: 50
              y: 110
              text: "Кнопка"
              onClicked: {
                  console.log(comboBox.model.get(comboBox.currentIndex).text)
              }
          }
      }

       

        Comments

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

        C ++ - Test 004. Pointers, Arrays and Loops

        • Result:50points,
        • Rating points-4
        m

        C ++ - Test 004. Pointers, Arrays and Loops

        • Result:80points,
        • Rating points4
        m

        C ++ - Test 004. Pointers, Arrays and Loops

        • Result:20points,
        • Rating points-10
        Last comments
        i
        innorwallNov. 11, 2024, 10:12 p.m.
        Django - Tutorial 055. How to write auto populate field functionality Freckles because of several brand names retin a, atralin buy generic priligy
        i
        innorwallNov. 11, 2024, 6:23 p.m.
        QML - Tutorial 035. Using enumerations in QML without C ++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
        i
        innorwallNov. 11, 2024, 3:50 p.m.
        Qt/C++ - Lesson 052. Customization Qt Audio player in the style of AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
        i
        innorwallNov. 11, 2024, 2:19 p.m.
        Heap sorting algorithm The role of raloxifene in preventing breast cancer priligy precio
        i
        innorwallNov. 11, 2024, 1:55 p.m.
        PyQt5 - Lesson 006. Work with QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
        Now discuss on the forum
        i
        innorwallNov. 11, 2024, 8:56 p.m.
        добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
        i
        innorwallNov. 11, 2024, 10:55 a.m.
        Всё ещё разбираюсь с кешем. 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
        9
        9AnonimOct. 25, 2024, 9:10 a.m.
        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

        Follow us in social networks