Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有不同列宽的QTableView_C++_Qt_Size_Qtableview_Qabstracttablemodel - Fatal编程技术网

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
width
QAbstractTableModel
,我想让每一列都有不同的宽度,并使用调整大小选项
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子类化或找到其他替代方法。