Запрет изменения размера окна во время изменения размера QStatusBar

Если главное окно приложения имеет QStatusBar и если его ширина становится больше (например, при добавлении виджета), чем ширина основного окна, окно автоматически изменяет размер, чтобы соответствовать строке состояния. Интересно, есть ли способ предотвратить изменение размера окна в таких случаях?

Заранее спасибо!

3 ответа

Решение

Я нашел выход из этой ситуации. Я добавил QScrollArea в строке состояния, и теперь я добавляю свои виджеты в эту область прокрутки, чтобы они не влияли на размер главного окна.

У меня была та же проблема, и я смог ее исправить, просто установив фиксированный размер для виджета, который я добавил в строку состояния.

Для этого я бы написал небольшой блокировщик изменения размера RAII, например:

class ResizeBlocker
{ 
public:
    ResizeBlocker(QWidget *widget)
        : m_widget(widget)
    {
        m_widget->setFixedSize(m_widget->size());
    }

    ~ResizeBlocker()
    {
        m_widget->setFixedSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
    }

private:
    QWidget *m_widget;
};

Который может быть использован примерно так:

void MainWindow::addToStatusBar()
{
    ResizeBlocker doNotResizeHere(this);
    ui->statusBar->addWidget(new QLabel("A Label"));
}

Я создал демо-версию этого и загрузил его на GitHub здесь.

Другие вопросы по тегам