2014-04-28 6 views
1

Я отчаянно пытаюсь выяснить, как работает QDataWidgetMapper. Поэтому я написал небольшое демо-приложение с пользовательской моделью, полученной из QAbstractTableModel. При запуске приложения, я бы предположить, что я получаю следующий результат:QDataWidgetMapper: неправильное отображение

Firstname: Walter 
Surname: Pinkman 

Однако, я получаю:

Firstname: Jesse 
Surname: Pinkman 

Что мне не хватает?

Я также попытался изменить orientation-property из QDataWidgetMapper, но потом я получаю:

Firstname: White 
Surname: Pinkman 

пример:

#!/usr/bin/env python 

import sys 

from PyQt4 import QtGui 
from PyQt4 import QtCore 

class myModel(QtCore.QAbstractTableModel): 
    def __init__(self, parent = None): 
     QtCore.QAbstractTableModel.__init__(self, parent) 
     self.lst = [ 
        ["Walter", "White"], 
        ["Jesse", "Pinkman"] 
        ] 


    def columnCount(self, parent = QtCore.QModelIndex()): 
     return len(self.lst[0]) 


    def rowCount(self, parent = QtCore.QModelIndex()): 
     return len(self.lst) 


    def data(self, index, role = QtCore.Qt.DisplayRole): 
     row = index.row() 
     col = index.column() 
     if role == QtCore.Qt.EditRole: 
      return self.lst[row][col] 

class Window(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(Window, self).__init__(parent) 

     model = myModel(self) 

     # Set up the widgets. 
     firstnameLabel = QtGui.QLabel("Firstname:") 
     surnameLabel = QtGui.QLabel("Surname:") 
     firstname = QtGui.QLabel(self) 
     surname = QtGui.QLabel(self) 

     # Set up the mapper. 
     mapper = QtGui.QDataWidgetMapper(self) 
     mapper.setModel(model) 

     #map first row, first column to "firstname" 
     mapper.addMapping(firstname, 0, "text") 
     mapper.toFirst() 

     #map first row, second column to "surname" 
     mapper.addMapping(surname, 1, "text") 
     mapper.toNext() 

     #set up layout 
     layout = QtGui.QGridLayout() 
     layout.addWidget(firstnameLabel, 0, 0) 
     layout.addWidget(firstname, 0, 1) 
     layout.addWidget(surnameLabel, 1, 0) 
     layout.addWidget(surname, 1, 1) 
     self.setLayout(layout) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 

    window = Window() 
    window.show() 

    sys.exit(app.exec_()) 

ответ

1

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

+0

Хорошо, но в чем цель этого? Мое предположение заключалось в том, что я мог бы использовать 'QDataWidgetMapper' для сопоставления некоторых индексов моей пользовательской модели с виджетами. Знаете ли вы еще один способ добиться этого? – user2494129

+0

@ user2494129 Давайте изменим ваш вопрос: сколько раз кому-то нужно показывать объединенные данные из нескольких _дифференциальных строк таблицы? Строка таблицы - это основной кортеж данных, и все. В вашем случае вам, вероятно, нужны отдельные разделители для ваших виджетов. – Bogdan

+0

Позор мне, я не думал об использовании отдельных картографов. Иногда трудно увидеть лес через деревья ;-) Спасибо за вашу помощь! – user2494129