QT restoreGeometry срабатывает слишком поздно

117
24 мая 2019, 16:20

Доброй ночи! У меня тут какая-то непонятная ситуация. Например, в методе readMapSettings() в waterBody.setWaterBody(mapName); у меня происходит создание объектов и там очень важно, чтобы до их создания геометрия окна была уже полностью развернута - т.к. там внутри берутся размеры QLabel с QPixmap внутри. И эти размеры должны соответствовать полному окну(т.к. я закрыл приложение с полным окном), а значит открыться оно должно тоже с полным я ведь читаю из QSettings. Но в итоге в параметры объектов почему-то записываются width 100 и height 30, вместо 1004 и 977 соответственно. И уже потом это все дело через всякие эвенты приходит в норму, но с диким оверхедом. Я уже даже showEvent заюзал, чтобы гарантированно получить создание объектов уже после полностью развернутого главного окна. Но этого не происходит, я все равно получаю 100 и 30. Я сперва определяю qpixmap, затем читаю геометрию, потом уже создаю объекты, что еще ему надо??? Может есть возможность как-то дать команду развернуть окно сразу во чтобы то ни стало? На всякий случай указываю, что у меня есть еще один важный перегруженный метод - resizeEvent(). Он используется для сохранения пропорций после scaleContents QLabel. Но влиять на проблему вроде не должен.

void MainWindow::readMapSettings() {
    QSettings settings(".//settings.ini", QSettings::IniFormat);
    settings.beginGroup("MAPS");
    const QString mapName = settings.value("map", "MosquitoLake").toString();
    settings.endGroup();
    if(mapName == "CottagePond") {
        ui->labelImageMap->setPixmap(QPixmap(".//maps/Hootorez_CottagePond.jpg"));
        waterBody.setLabelImageMapPtr(ui->labelImageMap);
        readDisplaySettings();
        waterBody.setWaterBody(mapName);
        writeMapSettings(mapName);
    }
}
void MainWindow::showEvent(QShowEvent *event) {
    QMainWindow::showEvent(event);
    readMapSettings();
}
void MainWindow::resizeEvent(QResizeEvent *event) {
    if(!waterBody.getLabelImageMapPtr())
        return;
    int widthCurrentPixMap = 1;
    int heightCurrentPixMap = 1;
    const QPixmap* pixPtr = this->ui->labelImageMap->pixmap();
    if(pixPtr) {
        widthCurrentPixMap = pixPtr->width();
        heightCurrentPixMap = pixPtr->height();
    }
    const QSize pixmapSize(widthCurrentPixMap, heightCurrentPixMap);
    ui->labelImageMap->setFixedWidth(
        ui->centralWidget->height() * pixmapSize.width() / pixmapSize.height()
    );
    QMainWindow::resizeEvent(event);
}
READ ALSO
C++, Указатели. delete

C++, Указатели. delete

Вопрос в следующем(тк

159
Что делает строка virtual ~Figure() {};?

Что делает строка virtual ~Figure() {};?

Что делает эта строка:

137
Сортировка по русскому алфавиту С++

Сортировка по русскому алфавиту С++

В задании по С++ сказанно отсортирвать массив названий товаров продуктового магазина по алфавиту на русскомС английской сортировкой в Java мне...

162
Перегрузка операции ==

Перегрузка операции ==

Есть класс и у него перегружена операция ==

157