Проблема такая: есть MainWindow, на нем центральным виджетом установлен Label (занимает все свободное место). Label отображает pixmap. Все это собираю в дизайнере. Теперь требуется поместить Label внутрь ScrollArea.
Делаем (в коде прописываем) ScrollArea центральным виджетом, Label дочерним по отношению к ScrollArea. В результате получаем очень старнные размеры области ScrollArea (раза в полтора меньше размеров формы). Не понимаю, откуда эти размеры берутся, т.к. установка basesize и sizepolicy ни у Label ни у ScrollArea на размеры области отображения не влияет.
Если руками делать ScrollArea.resize(...) все замечательно работает. Или, например, задавать базовые размеры виджета и вызывать adjustSize - тоже все работает.
А вот почему без ручного ресайза криво получается я не понимаю.
Использую Qt (дизайнер, заголовочные файлы и т.д.) версии 4.3.2.
QScrollArea - странные размеры области отображения
Модератор: Модераторы разделов
-
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: QScrollArea - странные размеры области отображения
Что-то много действий.
Вот так вот не достаточно?
Код: Выделить всё
QLabel *label = new QLabel;
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(label);
Вот так вот не достаточно?
В дисгармонии со вселенной.
-
- Сообщения: 18
- ОС: Debian
Re: QScrollArea - странные размеры области отображения
Нет, не достаточно. Как MainWindow "узнает", что на форму нужно добавить ScrollArea вместе с Label? Я так понимаю, для этого нужно сделать ScrollArea дочерним по отношению к MainWindow (например, вызвав конструктор ScrollArea( QWidget * parent = 0 ).
Таким образом, мой код выглядит так:Ничего лишнего.
Для создания формы я использую дизайнер, поэтому Label мне вручную создавать не надо (хотя я пробовал и вручную).
А если не привязывать ScrollArea к форме, будет создано отдельное окно, в котором и будет отображена ScrollArea. А размеры этого окна будут равны тем самым "странным" размерам, которые ScrollArea принимает, если привязать ее к основной форме.
А если все делать вручную, без использования дизайнера - никаких проблем.
Таким образом, мой код выглядит так:
Код: Выделить всё
ScrollArea = new QScrollArea(centralwidget);
ScrollArea->setWidget(label);
scrollArea->setBackgroundRole(QPalette::Dark);
Для создания формы я использую дизайнер, поэтому Label мне вручную создавать не надо (хотя я пробовал и вручную).
А если не привязывать ScrollArea к форме, будет создано отдельное окно, в котором и будет отображена ScrollArea. А размеры этого окна будут равны тем самым "странным" размерам, которые ScrollArea принимает, если привязать ее к основной форме.
А если все делать вручную, без использования дизайнера - никаких проблем.
-
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: QScrollArea - странные размеры области отображения
Как MainWindow "узнает", что на форму нужно добавить ScrollArea вместе с Label? Я так понимаю, для этого нужно сделать ScrollArea дочерним по отношению к MainWindow (например, вызвав конструктор ScrollArea( QWidget * parent = 0 ).
Код: Выделить всё
QMainWindow::setCentralWidget ( QWidget * widget );
В дисгармонии со вселенной.
-
- Сообщения: 18
- ОС: Debian
Re: QScrollArea - странные размеры области отображения
Код: Выделить всё
QMainWindow::setCentralWidget ( QWidget * widget );
А зачем? Я собираю форму в дизайнере. Label автоматически становится центральным виджетом, это очень хорошо видно и в инспекторе объектов самого дизайнера, и в заголовочном файле формы, после компиляции.
Код: Выделить всё
ScrollArea = new QScrollArea(centralwidget);
ScrollArea->setWidget(label);
И все равно не понятно, откуда берутся размеры ScrollArea. Ну вот создается она в отдельном окне, а почему размеры окна не равны размерам Label? В Assistant'e читаем:
widgetResizable : bool
This property holds whether the scroll area should resize the view widget.
If this property is set to false (the default), the scroll area honors the size of its widget. Regardless of this property, you can programmatically resize the widget using widget()->resize(), and the scroll area will automatically adjust itself to the new size.
-
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: QScrollArea - странные размеры области отображения
Код: Выделить всё
#include <QApplication>
#include <QMainWindow>
#include <QScrollArea>
#include <QLabel>
#include <QImage>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow *mainWindow = new QMainWindow();
QLabel *imageLabel = new QLabel;
QImage image("/home/ed/temp/1/nimbus_xfce.png");
imageLabel->setPixmap(QPixmap::fromImage(image));
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
mainWindow->setCentralWidget(scrollArea);
mainWindow->show();
return app.exec();
}
Скажите, что не так делает этот код. А то как-то не совсем ясно, в чём проблема.
В дисгармонии со вселенной.