QT中tableWidget批量添加item,添加图片并居中

QT中tableWidget批量添加item,添加图片并居中

有这样一个比起奇怪的需求,比较难描述,先看最终效果吧!
在这里插入图片描述
这里用到了QtableWidget表格,手动一个一个放太费劲了。
还有图片资源,还需要居中,确实研究了几个小时。还是在这记录一下。
直接上代码吧!都有注解的。

    QPixmap Pic_R = QPixmap(":/back/PIC/redcircle.png");//添加红色的图片
    Pic_R = Pic_R.scaled(40,40);//设置图片的大小
    QPixmap Pic_G = QPixmap(":/back/PIC/greencircle.png");//添加绿色的图片
    Pic_G = Pic_G.scaled(40,40);//设置图片的大小

    //创建DI表格128路
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//禁止修改
    ui->tableWidget->verticalHeader()->setDefaultSectionSize(50);//行高50
    ui->tableWidget->horizontalHeader()->setDefaultSectionSize(110);//列宽110
    ui->tableWidget->verticalHeader()->setVisible(false);//不显示行标题
    ui->tableWidget->horizontalHeader()->setVisible(false);//不显示列标题
    ui->tableWidget->setColumnCount(16);//创建16行
    ui->tableWidget->setRowCount(16);//创建16列
    for(int i=0;i<16;i++)//赋予数据
    {
        for(int j=0;j<16;j+=2)//两列一组循环
        {
            QTableWidgetItem *name=new QTableWidgetItem();//定义一个表格元素的类
            QString DI_Number = "通道"+QString::number(i*8+j/2+1);//定义一个字符串 要添加会变化的字符
            name->setText(DI_Number);//赋予到表格元素中
            ui->tableWidget->setItem(i,j,name);//显示到N行N列
            ui->tableWidget->item(i,j)->setTextAlignment(Qt::AlignCenter);//设置文字居中
            ui->tableWidget->item(i,j)->setBackground(QBrush(QColor(204,204,204)));//改变单元格颜色

            QLabel *Label_LED = new QLabel();//定义一个QLabel类
            Label_LED->setMaximumSize(110,50);//设置的大小,就是单元格的大小
            if(DI_Table[i*8+j/2])//判断这一个是要红色还是绿色
                Label_LED->setPixmap(Pic_G);//绿色的
            else
                Label_LED->setPixmap(Pic_R);//红色的
            Label_LED->setAlignment(Qt::AlignCenter);//设置在QLabel中居中
            ui->tableWidget->setCellWidget(i,j+1,Label_LED);//显示在N行N列
        }
    }

补充一下,之前一直走弯路,掉进去的几个坑。

  1. 图片居中的原理是:让图片类QPixmap固定大小,在QLabel里居中。如果不规定图片大小,会按照资源的大小显示,效果就是这样的了。
    在这里插入图片描述
  2. 居中显示要使用Qt::AlignCenter,意思是水平垂直都居中。
    在底层代码里是这个意思 AlignCenter = AlignVCenter | AlignHCenter
  3. 其实Label_LED->setMaximumSize(110,50);是不需要的
    不设置Label的大小,也是一样的效果。
  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值