0

我是 qt 的新手,根据我的研究,我可以使用缩放函数更改像素图/图像的大小。但是当我运行程序时,图像大小仍然相同。这是代码。

QStringList headers;
QString headerValues="header1,header2";
headers=headerValues.split(",");
ui->tableWidget_2->setColumnCount(2);
ui->tableWidget_2->setHorizontalHeaderLabels(headers);
QStringList verticalHeaders;
QString verticalHeaderValues="vertical1,vertical2";
verticalHeaders=verticalHeaderValues.split(",");
ui->tableWidget_2->setRowCount(1);
ui->tableWidget_2->setVerticalHeaderLabels(verticalHeaders );
ui->tableWidget_2->horizontalHeader()->setDefaultSectionSize(150);
ui->tableWidget_2->verticalHeader()->setDefaultSectionSize(150);

ui->tableWidget_2->horizontalHeader()->setResizeMode(QHeaderView::Fixed);

ui->tableWidget_2->verticalHeader()->setResizeMode(QHeaderView::Fixed);
QString filename="/home/marcvincento/Desktop/Private/Projects/fixButtons/Printer.png";
QPixmap pic(filename);
pic.scaled ( 20, 20, Qt::IgnoreAspectRatio, Qt::FastTransformation );

QBrush brush(pic);

QTableWidgetItem* item=new QTableWidgetItem();

item->setBackground(brush);
item->setText("ADD 5,1");
ui->tableWidget_2->setItem(0,0,item);
4

1 回答 1

6

如果你阅读 QPixmap 的 Qt 文档,你会看到 scaled() 函数被声明const并返回一个 QPixmap。这意味着像素图本身没有被修改。发生的情况是这些函数返回像素图的缩放版本。您必须将其存储在某个地方。在您的情况下,您可以将缩放的像素图传递给 QBrush 构造函数:

QPixmap pic(filename);
QBrush brush(pic.scaled(20, 20, Qt::IgnoreAspectRatio,
                        Qt::FastTransformation));

如果您以后需要再次使用相同的缩放像素图并且对原始的未缩放像素图没有用处,那么您应该pic直接从源的缩放版本构建像素图,这样您最终不会执行相同的操作多次缩放操作:

QPixmap pic(QPixmap(filename).scaled(20, 20, Qt::IgnoreAspectRatio,
                                     Qt::FastTransformation));

如果您确实需要缩放版本和未缩放版本,那么显然您需要两个像素图;原始版本之一和缩放版本之一:

QPixmap pic(filename);
QPixmap picScaled(pic.scaled(20, 20, Qt::IgnoreAspectRatio,
                                     Qt::FastTransformation));
于 2013-06-21T05:30:11.180 回答