vic57
ModelIndex не нужен в реализации
Спасибо за поправку, а то я чет “затупил” над фразой “ModelIndex нужен, смотри реализацию по ссылке”
Спасибо еще раз!
В общем из такого исходника на Си
class StringListModel : public QAbstractListModel
{
Q_OBJECT
public:
StringListModel(const QStringList &strings, QObject *parent = 0)
: QAbstractListModel(parent), stringList(strings) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const;
private:
QStringList stringList;
};
int StringListModel::rowCount(const QModelIndex &parent) const
{
return stringList.count();
}
QVariant StringListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= stringList.size())
return QVariant();
if (role == Qt::DisplayRole)
return stringList.at(index.row());
else
return QVariant();
}
QVariant StringListModel::headerData(int section, Qt::Orientation orientation,
int role) const
{
if (role != Qt::DisplayRole)
return QVariant();
if (orientation == Qt::Horizontal)
return QString("Column %1").arg(section);
else
return QString("Row %1").arg(section);
}
У меня вышел вот такой на python3
#!-*-coding:utf-8-*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import uic
(Ui_MainWindow, QMainWindow) = uic.loadUiType('ex3.ui')
class MainWindow(QMainWindow):
"""MainWindow inherits QMainWindow"""
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
def __del__(self):
self.ui = None
pass
class StringListModel(QAbstractListModel):
def __init__(self, strings):
QAbstractListModel.__init__(self)
self._stringList = strings
def rowCount(self, parent=None):
return len(self._stringList)
def data(self, index, role):
if not index.isValid():
return None
if index.row() >= len(self._stringList):
return None
if role == Qt.DisplayRole:
return self._stringList[index.row()]
else:
return None
pass
def headerData(self, selection, orentation, role):
if role != Qt.DisplayRole:
return None
if orentation == Qt.Horizontal:
return 'Column %s'%selection
else:
return 'Row %s'%selection
#-----------------------------------------------------#
if __name__ == '__main__':
# create application
app = QApplication(sys.argv)
app.setApplicationName('test_my')
numbers = ["One", "Two", "Three", "Four", "Five"]
model = StringListModel(numbers)
# create widget
w = MainWindow()
w.setWindowTitle('test_my')
w.ui.listView.setModel(model)
w.show()
firstTableView = QTableView()
firstTableView.setModel(model)
firstTableView.show()
# connection
QObject.connect(app, SIGNAL('lastWindowClosed()'), app, SLOT('quit()'))
# execute application
sys.exit(app.exec_())
Это с учетом нового sip v2, нет QString и QVariant. Не понял как прикрепить файл ui, но там ничего особенного, в дизайнере создаете форму с одним виджетом QListView
Вдруг кому пригодится для понимания.