C++ 具有不同列宽的QTableView
我在应用程序中有一个C++ 具有不同列宽的QTableView,c++,qt,size,qtableview,qabstracttablemodel,C++,Qt,Size,Qtableview,Qabstracttablemodel,我在应用程序中有一个QTableViewwidthQAbstractTableModel,我想让每一列都有不同的宽度,并使用调整大小选项ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch) 在我的模型中,我会: 类范围模型:公共QAbstractTableModel{ //其他代码。。。。。。。 QVariant rangeModel::headerData(int段,Qt::定向,int角色)
QTableView
widthQAbstractTableModel
,我想让每一列都有不同的宽度,并使用调整大小选项ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch)代码>
在我的模型中,我会:
类范围模型:公共QAbstractTableModel{
//其他代码。。。。。。。
QVariant rangeModel::headerData(int段,Qt::定向,int角色)常量
{
if(方向!=Qt::水平)
返回QVariant();
if(角色!=Qt::DisplayRole&&role!=Qt::SizeHintRole)
返回QVariant();
if(角色==Qt::SizeHintRole)
{
道岔(区段){
案例0:返回QSize(58,20);
案例1:返回QSize(58,20);
案例2:返回QSize(58,20);
案例3:返回QSize(228,20);
}
}
道岔(区段){
案例0:返回“PREFIXMIN”;
案例1:返回“PREFIXMAX”;
案例2:返回“值”;
案例3:返回“进度条”;
默认值:返回QVariant();
}
}
因此,我希望我的行大小不同,但这种情况不会发生。由于某种原因,视图会忽略QSizeHint
,而且即使没有QHeaderView::Stretch
选项,它也无法工作。如何使列和标题大小不同?您可能需要使用以下方法:
ui->tableView->resizeColumnsToContents();//resize all the columns based on longest data in every column.
但是,如果您确实想使用代码中使用的宽度值精确调整它们的大小:
ui->tableView->horizontalHeader()->setSectionResizeMode (QHeaderView::Stretch);
ui->tableView->setColumnWidth(0,58);
ui->tableView->setColumnWidth(1,58);
ui->tableView->setColumnWidth(2,58);
ui->tableView->setColumnWidth(3,228);
我对此表示怀疑,你可以用QTableView实现这一点,但你可以为此编写自己的视图。你可以通过继承来编写自己的视图qabstractitemview@sanjay所以我需要继承qabstractitemview并重新实现qabstractitemview::sizeHintForColumn(int column)const
并返回我想要的大小?或者这还不够,我需要重新实现resizeEvent(QResizeEvent*event)
?您能解释一下您的答案是如何解决问题的吗从这个问题来看?只有代码的答案不是很有用,特别是对于更多偶然发现这篇文章的读者来说。谢谢!对不起。我假设,这一行代码是不言自明的。但我犯的另一个错误是,我假设他只是计算了他自己需要的宽度,以适应列中的所有数据,这就是我推荐的原因使用resizeColumnsToContents()
编辑。无论如何,我现在编辑了我的答案,并加入了设置ColumnWidth()
,以防他真的想设置那些特定的宽度。我从没想到他从未尝试过设置ColumnWidth()
函数。不幸的是,只有在事先知道列数的情况下,设置列宽才有效。resizeColumnsToContents()函数的速度非常慢。如果可以动态添加列(这是QAbstractTableModel的主要目的之一),则必须将QTableView子类化或找到其他替代方法。