Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939

Как в QTreeView и QStandardItemModel запомнить значение QLineEdit?

31.10.2019, 09:31. Показов 1780. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите, пожалуйста, как (может я не верно ставлю вопрос) QStandardItem запомнить (а потом при переключении QTreeView вернуть его) значение QLineEdit?

Сейчас: создается QStandardItemModel в который добавляется два объекта QStandardItem, есть QComboBox (выбор куда добавлять точки) и QPushButton которая создает точки в объекты QStandardItem.

Python
1
item = QStandardItem(f'Точка {self.object1.rowCount() + 1}')
Как не просто создать точку а еще и запомнить QLineEdit и если мы потом переключаемся между созданными точками возвращать значение которое точка запомнила?



Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
 
 
class App(QWidget):
    def __init__(self):
         super().__init__()
         self.title = 'PyQt5 Model Example'
         self.left = 10
         self.top = 10
         self.width = 640
         self.height = 240
         self.initUI()
        
    def initUI(self):
 
        self.model = QStandardItemModel(0, 0)
        all_items = QStandardItem("Все объекты")
        self.model.appendRow(all_items)
        self.object1 = QStandardItem("Объект 1")
        all_items.appendRow(self.object1)
        self.object2 = QStandardItem("Объект 2")
        all_items.appendRow(self.object2)
 
        view = QTreeView()
        view.header().hide()
        view.setModel(self.model)
 
        self.comboBox = QComboBox()
        self.comboBox.addItem("Объект 1")
        self.comboBox.addItem("Объект 2")
        but = QPushButton('Добавить в  группу')
        but.clicked.connect(self.on_click)
        poz_app = QLineEdit()# Введите позицию оборудования
 
 
        mainLayout = QHBoxLayout()
        mainLayout.addWidget(view)
        partLayout = QVBoxLayout()
        partLayout.addWidget(self.comboBox)
        partLayout.addWidget(but)
        partLayout.addWidget(poz_app)       
        mainLayout.addLayout(partLayout)
 
        self.setLayout(mainLayout)
        
        self.show()
 
    def on_click(self):
        ind = self.comboBox.currentIndex()
        if ind == 0:
            item = QStandardItem(f'Точка {self.object1.rowCount() + 1}')
            self.object1.appendRow(item)
        if ind == 1:
            item = QStandardItem(f'Точка {self.object2.rowCount() + 1}')
            self.object2.appendRow(item)
 
 
if __name__ == '__main__':
     app = QApplication(sys.argv)
     ex = App()
     sys.exit(app.exec_())
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2019, 09:31
Ответы с готовыми решениями:

QTreeView + QStandardItemModel - Обработка CheckState элементов
Если пользователь снял флажок с дочернего item'a, то надо чтобы все родительские приняли состояние Qt::PartiallyChecked, или, если это был...

QTreeView, QStandardItemModel и StyleSheet - индивидуальная настройка Item
На базе QTreeView создается дерево, с разным background color. но общий стиль приложения Flat Design. Поэтому все 3D градиенты нужно...

Одна модель данных (QStandardItemModel) для QTreeView и нестольких QComboBox
Доброго времени суток, уважаемые! Подскажите пожалуйста, можно ли реализовать одну модель данных для QTreeView и нескольких комбобоксов...

4
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
31.10.2019, 10:25
Михалыч, очень не понятна изложена суть проблемы.
Во первых: qlineedit не умеет запоминать.
Во вторых: нужно очень много почитать чтобы понять зачем, как и когда используют View и Model в Qt. Для ваших целей сойдет и QTreeWidget.
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
31.10.2019, 11:15  [ТС]
DmFat, я сам себя с трудом иногда понимаю

Добавлено через 1 минуту
Для тех кому мои путанные мысли тоже придут в голову, получилось что-то вроде этого:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
 
 
class App(QWidget):
    def __init__(self):
         super().__init__()
         self.title = 'PyQt5 Model Example'
         self.left = 10
         self.top = 10
         self.width = 640
         self.height = 240
         self.initUI()
        
    def initUI(self):
 
        self.model = QStandardItemModel(0, 0)
        all_items = QStandardItem("Все объекты")
        self.model.appendRow(all_items)
        self.object1 = QStandardItem("Объект 1")
        all_items.appendRow(self.object1)
        self.object2 = QStandardItem("Объект 2")
        all_items.appendRow(self.object2)
 
        self.view = QTreeView()
        self.view.header().hide()
        self.view.setModel(self.model)
 
        self.comboBox = QComboBox()
        self.comboBox.addItem("Объект 1")
        self.comboBox.addItem("Объект 2")
        but = QPushButton('Добавить в  группу')
        but.clicked.connect(self.on_click)
        but_2 = QPushButton('Извлечь из дерева')
        but_2.clicked.connect(self.on_click_2)        
        self.poz_app = QLineEdit()# Введите позицию оборудования
 
 
        mainLayout = QHBoxLayout()
        mainLayout.addWidget(self.view)
        partLayout = QVBoxLayout()
        partLayout.addWidget(self.comboBox)
        partLayout.addWidget(but)
        partLayout.addWidget(but_2)
        partLayout.addWidget(self.poz_app)       
        mainLayout.addLayout(partLayout)
 
        self.setLayout(mainLayout)
        
        self.show()
 
 
    def on_click_2(self):
        ind = self.view.currentIndex()
        print("Данные:", ind.data())
        self.poz_app.setText(str(ind.data())) 
        
 
 
    def on_click(self):
        ind = self.comboBox.currentIndex()
        if ind == 0:
            a=str(self.poz_app.displayText())
            item = QStandardItem(a)
            self.object1.appendRow(item)
        if ind == 1:
            a=str(self.poz_app.displayText())
            item = QStandardItem(a)
            self.object2.appendRow(item) 
 
if __name__ == '__main__':
     app = QApplication(sys.argv)
     ex = App()
     sys.exit(app.exec_())
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
31.10.2019, 11:21
DmFat, не учите человека плохому.
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
31.10.2019, 11:22  [ТС]
Пояснения, для тех кому интересно:

1. При клике на кнопку добавить в группу (def on_click) берем poz_app.displayText() (значение QLineEdit) и засовываем его в модель к объекту (object1 или object2):

Python
1
2
3
a=str(self.poz_app.displayText())
item = QStandardItem(a)
self.object1.appendRow(item)
2. Когда на добавлялись объектов в дерево и нужно вернуть какое-то значение ранее введенного элемента из дерева обратно в QLineEdit:

Python
1
2
3
ind = self.view.currentIndex()
print("Данные:", ind.data())
self.poz_app.setText(str(ind.data()))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2019, 11:22
Помогаю со студенческими работами здесь

Как в Qt создать привязку табличных данных к QLineEdit через QSqlQueryModel с возможностью пересчета данных в таблице и на форме в QLineEdit
Уважаемые пишу программу с большим количеством вычислений возник вопрос Как в Qt создать привязку табличных данных к QLineEdit через...

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

Как запомнить значение переменной?
Туплю, подскажите как запомнть значиения переменных сh_tot,w_tot,l_tot после того как обнуляются те, значения которых им присвоено ...

Как запомнить значение radioButton?
Добрый день, я пишу диплом, и на самом деле я никудышный программист. И так вышло, что пишу приложение типа аналога теста НА ПДД, только с...

Как запомнить последнее значение радиобатон
на форме есть 2 чекбокса 3 радиобатона(по умолчанию невидимы) 1 кнопка и 1 текстбокс Когда юзер кликает на чекбокс1 то 3 радиобатоны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru