gpt4 book ai didi

python - 如何使用 QAbstractTableModel 控制 QTableView 的 Header

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:44 25 4
gpt4 key购买 nike

下面的示例显示了“我的列名称”标题名称如何从 TableView 定义的范围内居中,使用:

self.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) 

enter image description here

虽然这可行,但我想知道如何使用其 headerData() 方法从 QAbstractTableModel 内部控制 Header

headerData() 返回 header 名称:

if orientation==QtCore.Qt.Horizontal:
return QtCore.QVariant('My Column Name')

如果 role!=QtCore.Qt.DisplayRole,它还会返回一个虚拟的 QtCore.QVariant()

    if role!=QtCore.Qt.DisplayRole:
return QtCore.QVariant()

还有哪些其他角色和值可用于模型的 headerData()

import sys, os
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)

class TableModel(QtCore.QAbstractTableModel):
def __init__(self):
QtCore.QAbstractTableModel.__init__(self)

self.items=['One','Two','Three','Four','Five','Six','Seven']

def rowCount(self, parent=QtCore.QModelIndex()):
return len(self.items)
def columnCount(self, index=QtCore.QModelIndex()):
return 1

def data(self, index, role):
if not index.isValid() or not (0<=index.row()<len(self.items)):
return QtCore.QVariant()

item=str(self.items[index.row()])

if role==QtCore.Qt.UserRole:
return item

if role==QtCore.Qt.DisplayRole:
return item

if role==QtCore.Qt.TextColorRole:
return QtCore.QVariant(QtGui.QColor(QtCore.Qt.white))

if role == QtCore.Qt.BackgroundRole:
if index.row()%2:
return QtCore.QVariant(QtGui.QColor("#242424"))
else:
return QtCore.QVariant(QtGui.QColor(QtCore.Qt.black))

def headerData(self, column, orientation, role=QtCore.Qt.DisplayRole):
if role!=QtCore.Qt.DisplayRole:
return QtCore.QVariant()
if orientation==QtCore.Qt.Horizontal:
return QtCore.QVariant('My Column Name')

class TableView(QtGui.QTableView):
def __init__(self, parent=None):
super(TableView, self).__init__(parent)

self.setBackgroundRole(QtGui.QPalette.Base)
p=self.palette()
p.setColor(self.backgroundRole(), QtGui.QColor((QtCore.Qt.black)))
self.setPalette(p)

self.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch)
self.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)

font=QtGui.QFont()
font.setPointSize(9)
self.horizontalHeader().setFont(font)

myModel=TableModel()
self.setModel(myModel)


view=TableView()
view.show()
sys.exit(app.exec_())

最佳答案

TableView 的标题由 QHeaderView 提供。 The doc描述它支持哪些数据角色:

QHeaderView respects the following item data roles: TextAlignmentRole, DisplayRole, FontRole, DecorationRole, ForegroundRole, and BackgroundRole.

下面是一个headerData 实现的例子(代码在 C++ 中):

QVariant
Model::headerData(int section, Qt::Orientation orientation, int role) const
{
...
if (role == Qt::DisplayRole)
{
return QString("Header #%1").arg(section);
}

if (role == Qt::FontRole)
{
QFont serifFont("Times", 10, QFont::Bold, true);
return serifFont;
}

if (role == Qt::TextAlignmentRole)
{
return Qt::AlignRight;
}

if (role == Qt::BackgroundRole)
{
return QBrush(Qt::blue);
}

if (role == Qt::ForegroundRole)
{
return QBrush(Qt::red);
}
...
}

还必须注意,BackgroundRole 很可能会被小部件调色板和一般应用程序样式覆盖。你可以查看this answer关于这个。

关于python - 如何使用 QAbstractTableModel 控制 QTableView 的 Header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com