Qt 如何创建类似QWidget的矩阵?

Qt 如何创建类似QWidget的矩阵?,qt,qtablewidget,Qt,Qtablewidget,如何创建一个QTableWidget,其中一些单元格使用统一大小的widget填充,而未使用的单元格则使用widget的大小填充?即使没有widget,结果表也应包含一个空白行/列。因为QTableWidget显然必须在每个单元格中包含某些内容,并且默认为可编辑文本框,似乎解决办法是在空白单元格中插入一个不可编辑的哑项目。或者有一个可以隐藏其内容的自定义小部件,这就是我在下面的示例中所做的 你特别问了关于固定尺寸的问题。。。根据具体的需要,有很多方法可以做到这一点。通过使用水平和垂直标题并使其不

如何创建一个QTableWidget,其中一些单元格使用统一大小的widget填充,而未使用的单元格则使用widget的大小填充?即使没有widget,结果表也应包含一个空白行/列。

因为QTableWidget显然必须在每个单元格中包含某些内容,并且默认为可编辑文本框,似乎解决办法是在空白单元格中插入一个不可编辑的哑项目。或者有一个可以隐藏其内容的自定义小部件,这就是我在下面的示例中所做的

你特别问了关于固定尺寸的问题。。。根据具体的需要,有很多方法可以做到这一点。通过使用水平和垂直标题并使其不可调整大小,可以在整个表格上设置固定大小。另一种方法是在添加/item或任何时候为每行/列调用QTableView::setColumnWidth/setRowHeight

下面是一个示例,使用前一种方法在标题上设置大小,以及两种确定实际大小的方法—在构建表之前使用固定大小,或者使用对自定义小部件项的查找来确定大小

Update:以前的版本使用了一个哑QTable WistGeTimes来填充空白区域,但我认为如果需要使用自定义小部件,这会更好。请参见编辑以前版本的历史记录

//main.cpp 包括 //包含进度条的自定义表小部件项。酒吧是 //如果该值设置为<0,则隐藏。 类ProgressBarTwItem:PublicQWidget、PublicQtableWidgetItem { Q_对象 公众: ProgressBarTwItemQWidget*父项=nullptr,int值=-1: QWidgetparent, QTableWidgetItemQTableWidgetItem::UserType { QHBoxLayout*l=新的QHBoxLayoutthis; l->setContentsMargins0,0,0,0; m_pb=新的QProgressBarthis; //不要让PB大小决定我们的大小 m_pb->setSizePolicyQSizePolicy::忽略,QSizePolicy::忽略; m_pb->setAlignmentQt::AlignCenter; m_pb->设置最大值44; l->addWidgetm_pb; setValuevalue; } QSize sizeHint const override{return QSize75,25;} 公众时段: void setValueint值=-1常量 { m_pb->setVisiblevalue>-1; 如果值>-1 m_pb->setValuevalue; } 私人: QProgressBar*m_-pb; }; int main argc,char*argv[] { QApplication aargc,argv; a、 热熔合; QDialog d; d、 setLayoutnew QVBoxLayout; QTableWidget*tw=新的QTableWidget5、4和d; d、 布局->添加WidgetW; //设置为'true',从添加的自定义小部件中查找最大大小, //否则,请使用预设大小 const bool useWidgetSize=true; //这将是固定的单元格大小,可以是预设的,也可以是由自定义小部件确定的。 //如果从窗口小部件中查找,这将成为最小大小 //以防小部件没有返回有效的大小。 QSize cellSize=useWidgetSize?QSize10,10:QSize50,15; 对于int r=0;rrowCount;++r{ 对于int c=0;ccolumnCount;++c{ //使一些小部件隐藏,其他小部件显示进度值 常数int val=!r*c%1+c?-1:c+1+r*10; ProgressBarTwItem*项目=新的ProgressBarTwItemtw,val; tw->setCellWidgetr,c,物料; //tw->setItemr,c,item;//需要吗?小部件仍然显示…文档不清楚。 //检查尺寸。 如果使用WidgetSize cellSize=cellSize.expandedToitem->sizeHint; } } //为水平和垂直标题上的列和行设置固定大小 //即使它们是隐藏的,这也会起作用 tw->horizontalHeader->setDefaultSectionSizecellSize.width; tw->horizontalHeader->setSectionResizeModeQHeaderView::Fixed; tw->verticalHeader->setDefaultSectionSizecellSize.height; tw->verticalHeader->setSectionResizeModeQHeaderView::Fixed; 返回d.exec; } 包括main.moc