Russian Qt Forum
Ноябрь 27, 2024, 11:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Не могу добавить скрол  (Прочитано 14228 раз)
kobra
Гость
« : Ноябрь 16, 2010, 01:41 »

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

И второй вопрос: Есть у меня главное окно, как можна пересилать события(нажатия клавиш) к его активному дочерному окну(QDockWidget)?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 16, 2010, 08:16 »

QScrollArea
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kobra
Гость
« Ответ #2 : Ноябрь 16, 2010, 22:55 »

Сделал так:
В конструкторе виджета прописал следующее:
Код:
QScrollArea *area = new QScrollArea(this);
Елементі виджета создаю к примеру так:
Код:
lengthLabel = new QLabel(this);
lengthLabel->setGeometry(QRect(5,30,100,20));
Результат на скриншоте
Записан
Mashkovd
Гость
« Ответ #3 : Ноябрь 17, 2010, 02:25 »

поддерживаю вопрос
у меня тоже была такая проблема(до сих пор не решена).

добавлял динамически лабел в виджет, у которого привязан скролареа.
Скролареа не появлялся, когда лабелы вылезали за размеры виджета.
Записан
ufna
Гость
« Ответ #4 : Ноябрь 17, 2010, 02:32 »

Ну дак а что такое QScrollArea то? В Вашем случае - скролл не содержит этот виджет, а лежит на нем.
Записан
kobra
Гость
« Ответ #5 : Ноябрь 17, 2010, 10:59 »

а можете написать как должно бить на самом деле?
Я пробовал так:
Код:
    QScrollArea *area = new QScrollArea();
    area->setWidget(this);
тогда окна вообще нет. Пробовал сделать так:
Код:
area->show();
тогда окно есть но пустое.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Ноябрь 17, 2010, 11:26 »

А что описание QScrollArea в ассистенте или здесь не судьба посмотреть?

Цитировать
lengthLabel->setGeometry(QRect(5,30,100,20));
Никогда! не делайте так. Пользуйтесь компоновщиками.
Про компоновку смотрим здесь.
« Последнее редактирование: Ноябрь 17, 2010, 11:32 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
kobra
Гость
« Ответ #7 : Ноябрь 17, 2010, 18:30 »

Я смотрел но надеялся что можна справиться без Layout, а то мне чесно говоря с ними очень тяжело работать.
Записан
kobra
Гость
« Ответ #8 : Ноябрь 18, 2010, 00:57 »

тогда вопрос о QFormLayout.
Как из него можна удалить строку?

PS Смотрите у меня для каждой строки есть: поле ввода, список и три кнопки, причем не обязательно что все три кнопки активные.
Я все виджеты обьединил в один. Внутри этого виджета они разместил с помощью QHBoxLayout. Потом в главном окне все разместил с помощью QFormLayout. Получилось что-то совсем плохое.
Можна ли как то задать дистанцию между елементами, их размеры и как можна сделать, если я прячу елемент место под него оставлялось?
« Последнее редактирование: Ноябрь 18, 2010, 01:53 от kobra » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Ноябрь 18, 2010, 09:04 »

Используйте лучше QGridLayout.
Для кнопок выставляйте QSizePolicy::Fixed.
Элементы можно не прятать, а просто их задизейблить.
Записан

Qt 5.11/4.8.7 (X11/Win)
kobra
Гость
« Ответ #10 : Ноябрь 18, 2010, 14:40 »

Используйте лучше QGridLayout.
Для кнопок выставляйте QSizePolicy::Fixed.
Элементы можно не прятать, а просто их задизейблить.
1. QGridLayout вместо чего?
2. Тогда нужно и размер кнопок указать?
3. А прятать не получиться? Так просто лучше смотриться
Записан
kobra
Гость
« Ответ #11 : Ноябрь 20, 2010, 19:53 »

итак все переделал под QGridLayout. Тогда почти автоматически решилась проблема с елементом что исчезает.
Можна ли сделать так чтоб QGridLayout раставлял виджеты не относительно середины окна, а относительно верхней части и левой стороны. А то когда я меняю количество шаров и у меня появляються новые поля все двигаеться что очень неудобно.

И как тепер мне добавить туда скрол? Если делаю так:
Код:
QScrollArea *ar = new QScrollArea();
this->setLayout(GridLayout);
ar->setWidget(this);
то скрола нет.

И второй вопрос: Есть у меня главное окно, как можна пересилать события(нажатия клавиш) к его активному дочерному окну(QDockWidget)?
и что насчет етого вопроса?
Записан
kobra
Гость
« Ответ #12 : Ноябрь 22, 2010, 20:32 »

Все с расстановкой разобрался. Действительно QGridLayout хорошая штука, если посидеть и помучаться с ней несколько дней.

Но скрола нет и ничего не могу сделать с етим. Я даже пробовал свой виджет унаследовать от QScrollAreaWidget но тогда не появляеться полоса прокрутки, а просто все уменшаеться в размерах чтоб поместиться в мой виджет.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Ноябрь 22, 2010, 20:46 »

Давай код.
Записан

Qt 5.11/4.8.7 (X11/Win)
kobra
Гость
« Ответ #14 : Ноябрь 22, 2010, 20:59 »

Код:
WindowData::WindowData():QScrollArea(){
    GridLayout = new QGridLayout();
    this->setLayout(GridLayout);
    setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    GridLayout->setAlignment(Qt::AlignTop);

    QLabel *QuantityLabel, *LengthLabel, *WidthLabel;

// ...

    GridLayout->addWidget(QuantityLabel,0,0);
    GridLayout->addWidget(QuantityField,0,1);
    GridLayout->addWidget(LengthLabel,1,0);
}
и етот виджет я вставляю в главном окне:
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
dockWidgetB->setWidget(WindowData::getInstance()); // Возвращает указатель на клас
}
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 23.