从 QLabel 顶部移除间隙

Posted

技术标签:

【中文标题】从 QLabel 顶部移除间隙【英文标题】:Removing gap from top of QLabel 【发布时间】:2017-08-18 07:26:30 【问题描述】:

我在我的 Qlabel 上显示图像。现在它在窗口顶部和 QLabel(image) 顶部之间有一个间隙,如下所示:

我不想要那个差距,我的 UI 当前 UI 是这样的:

label_image 是包含图像的 QLabel 的对象名称。

我的构造函数代码:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)

    this->setFixedSize(700,700);
    ui->setupUi(this);
    ui->centralWidget->layout()->setMargin(0);
    ui->centralWidget->layout()->setSpacing(0);



void MainWindow :: paintEvent(QPaintEvent * e)

    QMainWindow::paintEvent(e);
        if(1)
        
           QImage image("/Users/arqam/Desktop/ImageToCartoon/input/ElonMusk.jpeg");
           //some redundant code
           ui->label_image->setPixmap(QPixmap::fromImage(image));
         


使用centralWidget 中的更改,如图所示,我能够让图像从最左侧开始,但无法让图像从顶部开始。

编辑:我需要的是我的图像从top left 开始,左边部分已经完成,只剩下顶部。

我的 UI 的 XML 部分:https://pastebin.com/thxhc2Mj

【问题讨论】:

@eyllanesc 哦,抱歉,这是冗余代码的一部分,现在编辑了代码。我正在缩放图像,然后在 QLabel 中显示,我想这不会造成任何差异。 @eyllanesc 是的,基本上我希望图像从左上角开始,以便起始坐标相同。 @eyllanesc 我在paintevent中进行了一些操作,基本上在坐标上绘制了一些点,为此我希望Qlabel也从左上角开始。 只有我一个人,还是label_image 似乎不受任何布局管理? @Polentino 我也用 XML 代码编辑了这个问题,在那里你可以看到它在 QVBoxLayout 下。 【参考方案1】:

要出现在顶部,请使用setAlignment(),在您的情况下

ui->label_image->setAlignment(Qt::AlignTop);

【讨论】:

完美。 I was earlier trying with ui->label_image->layout()->setAlignment(Qt::AlignTop);,因此没有得到结果。 一件事是布局的对齐方式,另一件事是QLabel内容的对齐方式:P 是的,谢谢你的回答。虽然缩放 QT 有时会在横向模式下打开图像:ibb.co/imSJSF 知道为什么会发生这种行为吗? 我认为原始图像是这样的,您可以以 zip 格式共享图像,这样互联网不会更改某些位,我在使用 iphone 拍摄图像时观察到相同的行为,检查图片的详细信息,不仅基于您的图片查看器。 是的,图像是由 iphone 自己拍摄的,但我主要在那些太大而无法调整大小并显示在 Qlabel 中的图像中看到这一点。但这仍然让人感觉很奇怪。【参考方案2】:

基于 cmets 和 xml 文件,我认为在添加 label_image 之后对 QBoxLayout::addStretch() 的简单调用就足够了。这将在标签和水平布局之间插入一个QSpacerItem,这将使图像保持在顶部,而其余按钮则保持在底部,即使您调整了小部件的大小。

【讨论】:

以上是关于从 QLabel 顶部移除间隙的主要内容,如果未能解决你的问题,请参考以下文章

上视图和表格视图顶部单元格之间的间隙

iOS中表格视图顶部的奇怪间隙

在 iPad 上运行的 iPhone 应用程序中横向视图顶部的 20 像素间隙

移除 iOS 模拟器顶部不必要的标题和图标

如何消除页面顶部的空白?

Flutter监听滚动动作 控制组件 透明度渐变 ( 移除顶部状态栏空白 | 帧布局组件 | 透明度组件 | 监听滚动组件 )