QT中tableWidget批量添加item,添加图片并居中
有这样一个比起奇怪的需求,比较难描述,先看最终效果吧!
这里用到了QtableWidget表格,手动一个一个放太费劲了。
还有图片资源,还需要居中,确实研究了几个小时。还是在这记录一下。
直接上代码吧!都有注解的。
QPixmap Pic_R &#61; QPixmap(":/back/PIC/redcircle.png");Pic_R &#61; Pic_R.scaled(40,40);QPixmap Pic_G &#61; QPixmap(":/back/PIC/greencircle.png");Pic_G &#61; Pic_G.scaled(40,40);ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);ui->tableWidget->verticalHeader()->setDefaultSectionSize(50);ui->tableWidget->horizontalHeader()->setDefaultSectionSize(110);ui->tableWidget->verticalHeader()->setVisible(false);ui->tableWidget->horizontalHeader()->setVisible(false);ui->tableWidget->setColumnCount(16);ui->tableWidget->setRowCount(16);for(int i&#61;0;i<16;i&#43;&#43;){for(int j&#61;0;j<16;j&#43;&#61;2){QTableWidgetItem *name&#61;new QTableWidgetItem();QString DI_Number &#61; "通道"&#43;QString::number(i*8&#43;j/2&#43;1);name->setText(DI_Number);ui->tableWidget->setItem(i,j,name);ui->tableWidget->item(i,j)->setTextAlignment(Qt::AlignCenter);ui->tableWidget->item(i,j)->setBackground(QBrush(QColor(204,204,204)));QLabel *Label_LED &#61; new QLabel();Label_LED->setMaximumSize(110,50);if(DI_Table[i*8&#43;j/2])Label_LED->setPixmap(Pic_G);elseLabel_LED->setPixmap(Pic_R);Label_LED->setAlignment(Qt::AlignCenter);ui->tableWidget->setCellWidget(i,j&#43;1,Label_LED);}}
补充一下&#xff0c;之前一直走弯路&#xff0c;掉进去的几个坑。
- 图片居中的原理是&#xff1a;让图片类QPixmap固定大小&#xff0c;在QLabel里居中。如果不规定图片大小&#xff0c;会按照资源的大小显示&#xff0c;效果就是这样的了。
- 居中显示要使用Qt::AlignCenter&#xff0c;意思是水平垂直都居中。
在底层代码里是这个意思 AlignCenter &#61; AlignVCenter | AlignHCenter - 其实Label_LED->setMaximumSize(110,50);是不需要的
不设置Label的大小&#xff0c;也是一样的效果。