假设我有一个包含30列的表,并且想要使用QSqlTableModel / QTableView并且只显示5列。除了25次调用setColumnHidden()函数之外还有其他方法吗?
model = QSqlTableModel(self)
model.setTable("table")
...
view = QTableView()
view.setModel(model)
...
#insane:
view.setColumnHidden(0, True)
view.setColumnHidden(4, True)
view.setColumnHidden(6, True)
view.setColumnHidden(7, True)
view.setColumnHidden(9, True)
view.setColumnHidden(10, True)
view.setColumnHidden(11, True)
...
view.setColumnHidden(29, True)
如果DBA添加一些我不希望用户看到的新列,该怎么办?对所有已安装的应用程序进行更改以添加一些新的view.setColumnHidden(n,True)行?不太实际。
也许有一些Qt函数,比如view.setColumnsShown([1,2,3,5,8])我不知道?
答案 0 :(得分:2)
您可以定义自己的setColumnsShown()
功能:
from sets import Set
def setColumnsShown(view, showcols):
allcols = Set(range(0, view.model().columnCount()))
for col in allcols.difference(showcols):
view.setColumnHidden(col, True)
要处理可能添加新列的情况,您可以将QSqlTableModel
setColumnsShown
信号连接到重新调用{{1}}的处理函数。
答案 1 :(得分:1)
我认为没有这个功能,但如果您想自动执行此操作,您可以编写自己的功能或代码片段,即可随意使用。不幸的是我不熟悉Qt + Python,但在C ++中可以用这段代码完成。这是一些循环,所以我认为你可以用Python语法编写相同的代码。我也写了评论,以显示这段代码的确切运作方式。
QList<int> list;//create list where we set number of columns to be shown
list<< 1<<2;//write in list numbers of columns
int c = ui->tableView->model()->columnCount();//get count of columns
for (int i = 0; i < c; ++i)
{
ui->tableView->setColumnHidden(i,true);//hide all columns
}
for (int i = 0; i < list.length(); ++i)
{
if(list.at(i) < c)
ui->tableView->setColumnHidden(list.at(i),false);//show columns which we want
}