Qt cpp 在QTableWidget单元格内居中显示 QPixmap ,3种方式
时间: 2024-03-12 07:50:21 浏览: 59
好的,以下是三种在QTableWidget单元格内居中显示QPixmap的方式:
1. 使用QTableWidgetItem
可以使用QTableWidgetItem来显示QPixmap,并通过setFlags()函数设置单元格内容居中显示。示例代码如下:
```cpp
QPixmap pixmap("image.png");
QTableWidgetItem* item = new QTableWidgetItem();
item->setData(Qt::DecorationRole, pixmap);
item->setFlags(item->flags() ^ Qt::ItemIsEditable); // 禁止编辑
item->setTextAlignment(Qt::AlignCenter); // 内容居中显示
ui->tableWidget->setItem(row, column, item);
```
其中,row和column表示单元格的行和列。通过setData()函数设置QPixmap,并通过setTextAlignment()函数设置内容居中显示。setFlags()函数可以禁止单元格编辑。
2. 继承QStyledItemDelegate
可以通过继承QStyledItemDelegate,并在paint()函数中绘制QPixmap来实现单元格内居中显示QPixmap。示例代码如下:
```cpp
class ImageDelegate : public QStyledItemDelegate
{
public:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
if (index.isValid() && index.data().canConvert<QPixmap>()) {
QPixmap pixmap = qvariant_cast<QPixmap>(index.data());
QRect rect = option.rect;
painter->drawPixmap(rect.x() + (rect.width() - pixmap.width()) / 2,
rect.y() + (rect.height() - pixmap.height()) / 2,
pixmap);
} else {
QStyledItemDelegate::paint(painter, option, index);
}
}
};
```
然后,在需要使用该委托的QTableWidget中设置委托,示例代码如下:
```cpp
ui->tableWidget->setItemDelegate(new ImageDelegate);
```
3. 使用QLabel
可以在单元格中使用QLabel来显示QPixmap,并设置QLabel的对齐方式来实现内容居中显示。示例代码如下:
```cpp
QPixmap pixmap("image.png");
QLabel* label = new QLabel;
label->setPixmap(pixmap);
label->setAlignment(Qt::AlignCenter); // 内容居中显示
ui->tableWidget->setCellWidget(row, column, label);
```
其中,row和column表示单元格的行和列。通过setPixmap()函数设置QPixmap,并通过setAlignment()函数设置内容居中显示。最后,使用setCellWidget()函数将QLabel放入单元格中。
阅读全文