Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: _arti_ от Май 25, 2007, 07:11



Название: Вопрос по скроллам
Отправлено: _arti_ от Май 25, 2007, 07:11
Ребята проясните ситуацию. Относительно недавно начал изучать Qt, поэтому некоторые моменты еще не понятны.

Добавляю на форму кнопки QPushButton, сверху вниз. Этих кнопок такое количество, что некоторые не помещаются на форме. Они становятся видны, если изменить размер формы. Вопрос в том, как сделать, чтобы автоматически появлялся скролл при добавлении кнопок, которые на помещаются в размер формы?


Название: Вопрос по скроллам
Отправлено: Mikhail от Май 25, 2007, 08:08
Если кнопки не видны без изменения размера формы, значит ты не применяешь Layout ( элементы расположения ).
Если форма с кнопками не помещается на экране значит неправильная концепция построения формы.
В противном случае, помещай кнопки на widget произвольных (необходимых) размеров, а уже этот  widget с кнопками в QScrollArea размещенную на форме.

Для того чтобы скролл автоматически появлялся необходимо предварительно переопределить QScrollArea и создать его плагин для дизайнера.
А для начала советую "учиться, учиться и еще раз учиться". Изучай примеры, документацию и т.п. на кокретных прикладных задачах.


Название: Вопрос по скроллам
Отправлено: SABROG от Май 25, 2007, 08:41
Цитировать

Если форма с кнопками не помещается на экране значит неправильная концепция построения формы.


А если приложение проектировалось на мощной тачке, где разрещение огромное, все помещается, а потом было перенесено на слабенькую машинку где разрешение 640x480, врятли скролл откуда-то возмется, а вот caption уползет куда-нибудь далеко вверх.

2_arti_: посмотри пример \examples\widgets\imageviewer\ если картинка больше окна, то появляются скролы, если меньше, то убираются. Простановкой свойств не обойтись, придется пописать код.


Название: Вопрос по скроллам
Отправлено: _arti_ от Май 25, 2007, 08:52
Цитата: "Mikhail"

В противном случае, помещай кнопки на widget произвольных (необходимых) размеров, а уже этот  widget с кнопками в QScrollArea размещенную на форме.


не работает, мож чего-то не понимаю, а?
Выношу код на суд.

#include <QApplication>
#include <QWidget>
#include <QScrollArea>
#include <QPushButton>
#include <QHBoxLayout>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
   
   QWidget w;
   QScrollArea *area = new QScrollArea(&w);

   area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

   QWidget *wid = new QWidget(area);
   
   QPushButton *b1 = new QPushButton("button1", wid),
            *b2 = new QPushButton("button2", wid),
            *b3 = new QPushButton("button3", wid),
            *b4 = new QPushButton("button4", wid);

   b1->setGeometry(5, 5, 50, 30);
   b2->setGeometry(5, 40, 50, 30);
   b3->setGeometry(5, 75, 50, 30);
   b4->setGeometry(5, 110, 50, 30);

   //area->setWidget(wid);

   w.show();
    return app.exec();
}


Название: Вопрос по скроллам
Отправлено: Mikhail от Май 25, 2007, 09:44
получай рабочий код:

#include <QApplication>
#include <QWidget>
#include <QScrollArea>
#include <QPushButton>
#include <QHBoxLayout>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QWidget w;
QVBoxLayout *mainLayout = new QVBoxLayout;
QScrollArea *area = new QScrollArea(&w);


QWidget *wid = new QWidget;
wid->setMinimumWidth( 200);
wid->setMinimumHeight( 200);
QPushButton *b1 = new QPushButton( "button1",wid ),
*b2 = new QPushButton("button2", wid),
*b3 = new QPushButton("button3", wid),
*b4 = new QPushButton("button4", wid);

b1->setGeometry(5, 5, 50, 30);
b2->setGeometry(5, 40, 50, 30);
b3->setGeometry(5, 75, 50, 30);
b4->setGeometry(5, 110, 50, 30);

area->setWidget(wid);
mainLayout->addWidget( area );
w.setLayout(mainLayout);
w.resize ( 300, 300 );
w.show();
return app.exec();
}


Название: Вопрос по скроллам
Отправлено: _arti_ от Май 25, 2007, 10:13
Ребята спасибо, все заработало, нашел свои ошибки. )))


Название: Вопрос по скроллам
Отправлено: pastor от Май 25, 2007, 11:33
Цитата: "SABROG"

А если приложение проектировалось на мощной тачке, где разрещение огромное, все помещается, а потом было перенесено на слабенькую машинку где разрешение 640x480, врятли скролл откуда-то возмется, а вот caption уползет куда-нибудь далеко вверх.


А это уже говорит о неудачном проектировании самого гуя. Такие ситуации разработчик должен знать и принимать во внимание при разработке приложения