2013-04-08 2 views
0

У меня проблема с QTableView и помещением данных в него. Текст (строки) отображаются в порядке и можно сортировать и фильтровать через прокси-сервер и QStandardItemModelpyQt QTableView не отображает число (int, float и т. Д.)

self.material_model = QtGui.QStandardItemModel(self) 
self.proxy = QtGui.QSortFilterProxyModel(self) 
self.proxy.setSourceModel(self.material_model) 
self.t_material.setModel(self.proxy) 

Однако, если я пытаюсь поставить номера/значения в таблицу он не будет отображаться на всех, используя следующий фрагмент кода:

for row in xrange(0, len(self.material.data)): 
    item = QtGui.QStandardItem(str(self.material.data[row]['name'])) 
    self.material_model.setItem(row, 0, item) 

    item2 = QtGui.QStandardItem() 
    item2.setData(QtCore.Qt.DisplayRole,float(999.99)) 
    self.material_model.setItem(row, 1, item2) 

Я пробовал несколько вариантов, включая Qt.DisplayRole вместо Qt.EditRole. Но из других сообщений у меня возникает ощущение, что не каждый метод и функциональность реализованы в pyQt и поэтому не решались слишком много играть (я уже вложил пару часов, хотя). И теперь я надеюсь, что вы поможете мне решить эту проблему. Возможно, мой подход не подходит для того, что я пытаюсь сделать, что в основном фильтрует контент по тексту (именам) и значениям (интервалу). Я использую pyQt, Windows7, и данные берутся из SQLite DB, используя самозаписываемую оболочку запроса вместо QtSQL.

Любое понимание оценено!

Приветствия,

Бен

ответ

0

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

+0

Спасибо, это действительно работает, однако сортировка неправильная, так как, например, 10 не следует 11, а 100. Кроме того, я сомневаюсь, что фильтрация на интервале будет работать. Пожалуйста, поправьте меня, если я ошибаюсь. Предполагается ли, что весь QTableView будет работать только со строками? –

+0

Виджеты отображения данных, такие как QTableView, QListView принимают только QString как входные данные в свой метод addItem. Вы можете сортировать элемент до преобразования их в строки и вставки их в таблицу. – scottydelta

1

Я нашел несколько элегантное решение. Просто будьте осторожны, как вы форматируете свои числовые строки. Добавьте пробелы в начале в качестве заполнителей для 0 цифр. Так что если вы хотите, чтобы ваши номера, чтобы быть длиной 10 строк с 4 десятичными пробелами:

float_as_str = "{:10.4f}".format(float_i_started_with) 

В конце концов, когда вы сортировать их все работает. Единственными минусами являются:

  1. Необходимо указать, какова максимальная длина ваших номеров. В этом случае он будет сортировать любые цифры < 10^6 (6 из 10-4).

  2. Он придает ему выравнивание по правому краю.