下面的代码创建放置并排侧的两个QTableViews的窗口:如何更改QTableView项目从垂直到水平的方向?
左侧的TableView中被链接到QAbstractTableModel
。根据Model.data()
中定义的逻辑,tableView的项目是垂直放置的。
右侧的TableView链接到QSortFilterProxyModel
。我想用它来将垂直的TableView项目放置更改为水平。
请发表您的建议,以了解如何实现。如果更改项目方向的解决方案不需要ProxyModel,只要它可以正常工作就可以了!
SOURCE CODE POSTED LATER。
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
class Model(QAbstractTableModel):
def __init__(self, parent=None, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.items = ['Row0_Column0','Row0_Column1','Row0_Column2']
def rowCount(self, parent):
return len(self.items)
def columnCount(self, parent):
return 1
def data(self, index, role):
if not index.isValid(): return QVariant()
elif role != Qt.DisplayRole:
return QVariant()
row=index.row()
if row<len(self.items):
return QVariant(self.items[row])
else:
return QVariant()
class Proxy(QSortFilterProxyModel):
def __init__(self):
super(Proxy, self).__init__()
def rowCount(self, parent):
return 1
def columnCount(self, parent):
sourceModel=self.sourceModel()
return len(sourceModel.items)
def filterAcceptsRow(self, row, parent):
sourceModel=self.sourceModel()
sourceModelIndex=sourceModel.index(row, 0, QModelIndex())
sourceModelIndexName=sourceModel.data(sourceModelIndex, Qt.DisplayRole).toString()
return True
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
tablemodel=Model(self)
proxy=Proxy()
proxy.setSourceModel(tablemodel)
tableviewA=QTableView()
tableviewA.setModel(tablemodel)
tableviewB=QTableView()
tableviewB.setModel(proxy)
layout = QHBoxLayout(self)
layout.addWidget(tableviewA)
layout.addWidget(tableviewB)
self.setLayout(layout)
def test(self, arg):
print arg
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
有一个在C++类似的解决方案在http://stackoverflow.com/questions/21653253/how-to-change-orientation-of-qt-tableview – savolai