【问题标题】:How can I shrink QLabel images in a layout?如何缩小布局中的 QLabel 图像?
【发布时间】:2015-05-04 22:33:45
【问题描述】:

我是 Qt 新手,我正在尝试制作一些 .png 文件的 10x24 网格。似乎使用 QGridLayout 并用 QLabel 对象填充它是最好的方法,但 QLabel 似乎不会自动缩小以适应可用空间,所以我最终得到了这个:

另外,我应该提到我正在使用我创建的 QLabel 的子类,并且这些对象是作为容器对象中数组的一部分创建的:

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

【问题讨论】:

  • 一般说明:QGraphicsView 的东西传统上用于您似乎拥有的视图。或者,使用 Qt Quick 2 (QML) 将是一种更现代或类似 Qt5 的方法。只要您只有一个图像网格,QWidgets 就应该可以工作,但是一旦您开始想要很多移动项目、一些图形效果等,您的代码就会开始变得混乱。
  • 感谢您的提醒。我正在制作的这个应用程序中的大多数项目都不会改变位置,所以希望我会没事的。

标签: qt


【解决方案1】:

用途:

array[c]->setScaledContents(true);

或者在你的 ObjectSlot 构造函数中:

setScaledContents(true);

【讨论】:

    【解决方案2】:

    QLabel 不会缩放其图像。您可以为您的标签类(或父容器)添加一个调整大小事件处理程序,一旦知道可用空间,它将缩放图像,然后将其分配给标签。

    【讨论】:

      【解决方案3】:

      好的,这似乎可行:

      void ObjectSlot::paintEvent(QPaintEvent* event) {
          QPixmap* image = new QPixmap("://images/Box.png");
          setPixmap(image->scaled(width(),height(),Qt::KeepAspectRatio));
          QLabel::paintEvent(event);}
      

      【讨论】:

      • 这会在 每个 绘制事件中重新缩放图像。您可能应该移动 setPixmap 来调整事件大小。或者,在绘制事件中检查图像是否需要重新缩放。
      猜你喜欢
      • 2013-12-28
      • 2011-05-16
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多