crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

kuler
  опции профиля:
сообщение 24.2.2009, 11:48
Сообщение #1


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


как я понял у QFrame не получится скроллбоксы сделать? (когда вложенные элементы не умещаются)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
4 страниц V   1 2 3 > »   
Начать новую тему
Ответов (1 - 34)
SABROG
  опции профиля:
сообщение 24.2.2009, 12:26
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(kuler @ 24.2.2009, 11:48) *
как я понял у QFrame не получится скроллбоксы сделать? (когда вложенные элементы не умещаются)

Помести на него QScrollArea, убери границы, сними флажок widgetResizeable.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 24.2.2009, 13:06
Сообщение #3


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(SABROG @ 24.2.2009, 12:26) *
Помести на него QScrollArea,

как? так не получается:
area = new QScrollArea(ui.frame);
area->setWidget(ui.frame);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 24.2.2009, 13:38
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Да вы батенька извращенец :) Эта позиция в камасутре называется 69.
Ты сначала передаешь QFrame в конструктор QScrollArea в качестве родителя, а потом делаешь родителя чайлдом в setWidget().

Сообщение отредактировал SABROG - 24.2.2009, 13:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.2.2009, 17:52
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 24.2.2009, 16:38) *
Эта позиция в камасутре называется 69.
очень метко.

По делу, kuler, незабудь перед размещением одного виджета в другом, в контейнер положить компоновщик, а затем уже другой виджет, а иначе прийдется размером вложеного виджета управлять в рукопашную.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 24.2.2009, 18:07
Сообщение #6


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


так лэйаут класть во фрейм или скролл?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 24.2.2009, 18:26
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(kuler @ 24.2.2009, 18:07) *
так лэйаут класть во фрейм или скролл?

Видимо так
QFrame
    QScrollArea
        QLayout
            QWidget's
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.2.2009, 18:30
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 24.2.2009, 21:26) *
QScrollArea
а его кто растягивать на весь родитель будет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 24.2.2009, 18:39
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 24.2.2009, 18:30) *
Цитата(SABROG @ 24.2.2009, 21:26) *
QScrollArea
а его кто растягивать на весь родитель будет?

А, ну да. Я больше привык к визуальному проектированию :)
Хотя насчет второго layout'a я не уверен, т.к. скроллбары тогда не появятся, если лэйаут - виджеты по видимой области растянет.

QFrame
    QLayout
        QScrollArea
            QLayout
                QWidget's


Сообщение отредактировал SABROG - 24.2.2009, 18:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 26.2.2009, 12:01
Сообщение #10


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


облом короче. На скролл действительно лэй не надо класть, так как скроллы появляться не будут, а на QScrollArea
можно добавить только один виджет используя setWidget ( QWidget * widget ).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.2.2009, 12:49
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(kuler @ 26.2.2009, 12:01) *
облом короче. На скролл действительно лэй не надо класть, так как скроллы появляться не будут, а на QScrollArea
можно добавить только один виджет используя setWidget ( QWidget * widget ).

Почему, ведь дизайнер позволяет любое количество виджетов добавить? Мне кажется достаточно просто в конструкторе в качестве parent'a указать либо QScrollArea, либо QScrollArea::widget().

Кстати не понимаю замут с Grid Layout'ом, например кнопка "Layout in a Grid" растягивает окна по всей видимой клиенсткой части, в то время как перенос "Grid Layout" на форму не растягивает и может принимать любые размеры.

Сообщение отредактировал SABROG - 26.2.2009, 12:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 26.2.2009, 13:09
Сообщение #12


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(SABROG @ 26.2.2009, 12:49) *
Почему, ведь дизайнер позволяет любое количество виджетов добавить? Мне кажется достаточно просто в конструкторе в качестве parent'a указать либо QScrollArea, либо QScrollArea::widget().

так фрейм не появляется
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 26.2.2009, 13:12
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(kuler @ 26.2.2009, 13:09) *
Цитата(SABROG @ 26.2.2009, 12:49) *
Почему, ведь дизайнер позволяет любое количество виджетов добавить? Мне кажется достаточно просто в конструкторе в качестве parent'a указать либо QScrollArea, либо QScrollArea::widget().

так фрейм не появляется

А ты ему show() сделай.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.2.2009, 13:13
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 26.2.2009, 15:01) *
только один виджет используя setWidget ( QWidget * widget ).
ну на него компоновщик и остальные. или ты не этого хотел?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 26.2.2009, 18:15
Сообщение #15


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 26.2.2009, 13:13) *
ну на него компоновщик и остальные. или ты не этого хотел?

тогда скролл не появится

Цитата(SABROG @ 26.2.2009, 13:12) *
А ты ему show() сделай.

а визибле не достаточно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.2.2009, 18:57
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 26.2.2009, 21:15) *
тогда скролл не появится
почему не появится?

вот пример: Прикрепленный файл  scrolled.zip ( 2.28 килобайт ) Кол-во скачиваний: 433

переименуй в scrolled.ui
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 26.2.2009, 19:06
Сообщение #17


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 26.2.2009, 18:57) *
почему не появится?

посмотрел, в дизайнере нет скролла
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.2.2009, 19:24
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 26.2.2009, 22:06) *
посмотрел, в дизайнере нет скролла
а ты его размер поизменяй появится.

вообще в дизайнере как-то странно подкладываются компоновщики, я только два помещал. А в коде их три получается. Непонятно. Лучше в коде такие вещи делать, да и проще.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 26.2.2009, 19:43
Сообщение #19


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 26.2.2009, 19:24) *
а ты его размер поизменяй появится

чей его? и где в дизайнере добавляется скроллареа?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.2.2009, 19:56
Сообщение #20


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 26.2.2009, 22:43) *
чей его?
окна, меню Form->Preview...
появится окно потискай его за краешек мышкой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 26.2.2009, 20:12
Сообщение #21


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 26.2.2009, 19:56) *
появится окно потискай его за краешек мышкой.

чтоб мне пусто было не появляется
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.2.2009, 20:31
Сообщение #22


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 26.2.2009, 23:12) *
чтоб мне пусто было не появляется
ну, я не знаю, что у тебя там. Уменя 4.4.3 Опенсорсе готовая сборка под MinGW32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 2.3.2009, 15:53
Сообщение #23


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


вот такой вот код не работат
    QFrame* fr = AddFrame();
    QGridLayout* grid = (QGridLayout*)area->layout();
    grid->addWidget(fr, cnt / 4, cnt % 4)//добавление нового фрейма на лэйаут скроллареи
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.3.2009, 16:16
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


И ты ждал целые выходные, чтобы в понедельник напрячь меня? :)

Код добавляет на главную форму фрейм и 2 кнопки, все три компонента растягиваются по полной площади основного окна.
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget window;
    QGridLayout glay(&window);
    QFrame mainframe(&window);
    QPushButton btn(&window);
    QPushButton btn2(&window);
    glay.addWidget(&mainframe);
    glay.addWidget(&btn);
    glay.addWidget(&btn2);
    window.show();
    return a.exec();
}


Экспериментируй...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 2.3.2009, 17:27
Сообщение #25


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


SABROG, а к чему это? тут было про то чтобы скролл сделать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.3.2009, 17:49
Сообщение #26


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(kuler @ 2.3.2009, 17:27) *
SABROG, а к чему это? тут было про то чтобы скролл сделать

Я запутался в твоих темах :)
Пост к другой твоей теме относится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 2.3.2009, 20:12
Сообщение #27


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


SABROG, ну а какая разница? там ведь суть была чтобы при достижении минимум сайза либо расширялся либо не пытался воткнуть некрасиво фреймы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.3.2009, 20:33
Сообщение #28


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(kuler @ 2.3.2009, 20:12) *
SABROG, ну а какая разница? там ведь суть была чтобы при достижении минимум сайза либо расширялся либо не пытался воткнуть некрасиво фреймы

Это мой ответ тебе на вопрос "как сделать Layout in a Grid програмно". В конце концов, кто из нас программу пишет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 3.3.2009, 15:18
Сообщение #29


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


SABROG, у тебя студия? а то я мог бы кинуть простенький но конкретный код, что не работает и там нужно будет немного подправить
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 3.3.2009, 18:57
Сообщение #30


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


вот исходник, там порядка 15 строк существенного текста, запустите и вникните в проблему (если кому не лень)

Сообщение отредактировал kuler - 3.3.2009, 19:09
Прикрепленные файлы
Прикрепленный файл  2.ZIP ( 12.76 килобайт ) Кол-во скачиваний: 99
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.3.2009, 22:45
Сообщение #31


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Оно?

Раскрывающийся текст
#include "tst3.h"
#include <string>
#include <QScrollArea>
#include <QLabel>
#include "windows.h"

using namespace std;

QScrollArea* area;

tst3::tst3(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);

    CreateScrollArea();
}

tst3::~tst3()
{

}

QFrame* tst3::AddFrame()
{
    QFrame* frame = new QFrame(area->widget());

    frame->setFrameShape(QFrame::Panel);
    frame->setFrameShadow(QFrame::Raised);
    frame->setMinimumSize(QSize(100, 100));

    return frame;
}


void tst3::on_pushButton_clicked()
{
    static int cnt = 0;

    QFrame* newframe = AddFrame();
    QGridLayout* grid = (QGridLayout*)area->widget()->layout();
    grid->addWidget(newframe, cnt / 4, cnt % 4);
    cnt++;
}

void tst3::CreateScrollArea()
{
    QGridLayout *grid = new QGridLayout(ui.fr);

    area = new QScrollArea(ui.fr);
    area->setWidgetResizable(true);
    grid->addWidget(area);
    QWidget *contents = new QWidget(area);
    /*QGridLayout* widgetgrid = */new QGridLayout(contents);//грид для общего виджета
    area->setWidget(contents);
    area->setFrameShape(QFrame::NoFrame);
    //area->setMinimumSize(QSize(200, 85));

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 4.3.2009, 11:22
Сообщение #32


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(SABROG @ 3.3.2009, 22:45) *
Оно?

пипец! ты просто бог!
Как я понял главная моя ошибка - использование в качестве главного QFrame а не QWidget.

Сообщение отредактировал kuler - 4.3.2009, 12:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 4.3.2009, 18:29
Сообщение #33


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


а можно автоматично сделать чтобы при удалении какогото дочернего фрейма все остальные сдвигались налево, заполнив пустое место?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.3.2009, 18:31
Сообщение #34


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 4.3.2009, 21:29) *
все остальные сдвигались налево, заполнив пустое место?
распорку поставь

Хотя это ноборот будет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 18:37
Сообщение #35


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


area->widget()->updateGeometry() попробуй вызывать после удаления
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 3.6.2025, 20:10