Qt 如何在布局中收缩QLabel图像?
我是Qt新手,我正在尝试用一些.png文件制作一个10x24的网格。似乎使用QGridLayout并用QLabel对象填充它是最好的方法,但QLabel似乎不会自动收缩以适应可用空间,因此我最终得出以下结论: 另外,我应该提到我正在使用我创建的QLabel的一个子类,并且这些对象是作为容器对象中数组的一部分创建的:Qt 如何在布局中收缩QLabel图像?,qt,Qt,我是Qt新手,我正在尝试用一些.png文件制作一个10x24的网格。似乎使用QGridLayout并用QLabel对象填充它是最好的方法,但QLabel似乎不会自动收缩以适应可用空间,因此我最终得出以下结论: 另外,我应该提到我正在使用我创建的QLabel的一个子类,并且这些对象是作为容器对象中数组的一部分创建的: void ObjectSlotArray::initialize() { first = FIRST; isCreated = false; layout = new QGrid
void ObjectSlotArray::initialize() {
first = FIRST;
isCreated = false;
layout = new QGridLayout(this);
for (int c = 0; c < 10; c++) {
array[c] = new ObjectSlot(c);
layout->addWidget(array[c], (int)(c / 24), c % 24);
array[c]->show();} } //10x24 grid
void objectslotaray::initialize(){
第一=第一;
isCreated=false;
布局=新的QGridLayout(本);
对于(int c=0;c<10;c++){
数组[c]=新对象槽(c);
布局->添加小部件(数组[c],(int)(c/24),c%24);
数组[c]->show();}}//10x24网格
QLabel不会缩放其图像。您可以为标签类(或父容器)添加一个调整大小事件处理程序,一旦已知可用空间,该处理程序将缩放图像,然后将其分配给标签。使用:
array[c]->setScaledContents(true);
或者在ObjectSlot构造函数中:
setScaledContents(true);
好的,这似乎有效:
void ObjectSlot::paintEvent(QPaintEvent* event) {
QPixmap* image = new QPixmap("://images/Box.png");
setPixmap(image->scaled(width(),height(),Qt::KeepAspectRatio));
QLabel::paintEvent(event);}
一般说明:QGraphicsView内容传统上用于您似乎拥有的视图。或者,使用qtquick2(QML)将是一种更现代或类似Qt5的方法。只要你有一个网格的图像,QWidgets就应该可以工作,但是一旦你开始想要很多移动的项目,一些图形效果等,你的代码就会很快变得凌乱。谢谢你的提醒。我正在制作的应用程序中的大多数项目不会改变位置,所以希望我会没事。这会在每次绘画活动中重新缩放图像。您可能应该移动
setPixmap
来调整事件大小。或者,在“绘制事件”中执行之前,检查图像是否需要重新缩放。