Удаление пробела в верхней части QLabel

Я показываю изображение на моем Qlabel. Прямо сейчас у него есть зазор между верхней частью окна и верхней частью QLabel (изображение), например:

введите здесь описание изображения

Я не хочу этого разрыва, мой текущий пользовательский интерфейс выглядит следующим образом:

введите здесь описание изображения

Где 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, левая часть готова, осталась только верхняя часть.

Моя XML-часть пользовательского интерфейса: https://pastebin.com/thxhc2Mj


person arqam    schedule 18.08.2017    source источник
comment
@eyllanesc О, извините, это была часть избыточного кода, сейчас отредактировал код. Там я масштабирую изображение, а затем показываю в QLabel, я думаю, это не должно вызывать никакой разницы.   -  person arqam    schedule 18.08.2017
comment
@eyllanesc Да, в основном я хочу, чтобы изображение начиналось сверху слева, чтобы начальная координата была такой же.   -  person arqam    schedule 18.08.2017
comment
@eyllanesc Есть некоторая операция, которую я выполняю в событии рисования, в основном рисую несколько точек по координате, и для этого я хочу, чтобы Qlabel также начинался сверху слева.   -  person arqam    schedule 18.08.2017
comment
мне кажется, или label_image не управляется никаким макетом?   -  person Polentino    schedule 18.08.2017
comment
@Polentino Я также отредактировал вопрос с кодом XML, вы можете видеть, что он находится в QVBoxLayout.   -  person arqam    schedule 18.08.2017


Ответы (2)


Чтобы появиться вверху, используйте setAlignment(), в вашем случае

ui->label_image->setAlignment(Qt::AlignTop);
person eyllanesc    schedule 18.08.2017
comment
Перфекто. I was earlier trying with ui->label_image->layout()->setAlignment(Qt::AlignTop);, при этом не получая результата. - person arqam; 18.08.2017
comment
Одно дело — выравнивание макета, а другое — выравнивание содержимого QLabel: P - person eyllanesc; 18.08.2017
comment
Да, спасибо за ответ. При масштабировании QT иногда переводит изображения в ландшафтный режим: ibb.co/imSJSF Есть идеи, почему происходит такое поведение? - person arqam; 18.08.2017
comment
Я думаю, что исходное изображение выглядит так, вы можете поделиться изображением в почтовом индексе, чтобы Интернет не менял некоторые биты, я наблюдал такое же поведение при съемке изображения с помощью iphone, проверьте детали изображения, а не только на основе в вашем средстве просмотра изображений. - person eyllanesc; 18.08.2017
comment
Да, изображение было сделано самим iphone, но я вижу это в основном на тех изображениях, которые были слишком большими, чтобы их можно было изменить и показать в Qlabel. Но все равно это кажется странным. - person arqam; 18.08.2017
comment
Некоторое время назад пользователь задал мне тот же вопрос, когда я отправляю его в Интернете, загружая в места, как вы использовали, проблема была исправлена ​​​​при загрузке, но когда я отправляю его в заархивированном виде, наблюдайте ту же проблему, что и у вас, при проверке размеров файла Изображение Я обнаружил, что изображение было повернуто, т.е. программа просмотра изображений Mac повернула изображения. - person eyllanesc; 18.08.2017
comment
Так это связано с изменениями, внесенными в биты изображения? Сейчас все мои изображения находятся в самом локальном хранилище. - person arqam; 18.08.2017
comment
Да, я начал проверять биты заголовка изображения и понял, что биты, указывающие размер, перепутаны местами. - person eyllanesc; 18.08.2017
comment
Но в моем случае нет взаимодействия с Интернетом, почему возникает эта проблема? - person arqam; 18.08.2017
comment
Нет, я не думаю, что это хорошо объясняет, я хочу вам сказать, что iphone не сохраняет изображение правильно или делает это с форматом, отличным от стандартного, а Qt использует стандартный формат изображений. Каков размер вашего изображения в соответствии с видоискателем MAC? - person eyllanesc; 18.08.2017
comment
Изображение, которое меняет свою ориентацию, это 2320x3088, и когда я изменил его размер на 769x1024, оно не изменило своей ориентации. - person arqam; 18.08.2017

Основываясь на комментариях и XML-файле, я думаю, что простой вызов QBoxLayout:: addStretch() сразу после добавления label_image должно быть достаточно. Это вставит QSpacerItem между меткой и горизонтальным макетом, который сохранит изображение вверху, а остальные кнопки внизу, даже если вы измените размер виджета.

person Polentino    schedule 18.08.2017