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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Не могу добавить скрол  (Прочитано 14211 раз)
ufna
Гость
« Ответ #15 : Ноябрь 22, 2010, 22:28 »

Не, ну это, документацию читают только ламеры, да?

Самый первый пример
Записан
kobra
Гость
« Ответ #16 : Ноябрь 23, 2010, 00:15 »

Не, ну это, документацию читают только ламеры, да?

Самый первый пример
сомневаюсь, потому что я тоже ее читал, а я себя ламером не считаю.

я ничего против документации по qt не иею, но считаю что о скролах там написано плохо. Что из етого примера можна поонять? Ничего!!! Они сделали setWidget и у них все заработало. А как сделать чтоб содержимое виджета прокручивалось? Там только описано как ето сделать без примера, и если так делать то у меня почти работает(если указать мин. размер виджета), но когда я вставляю виджет как DockWidget оно работать перестает.
Записан
ufna
Гость
« Ответ #17 : Ноябрь 23, 2010, 01:48 »

Если с английским совсем плохо, то есть гугл транслятор как пример. Там же черным по белому написано:

Цитировать
A scroll area is used to display the contents of a child widget within a frame. If the widget exceeds the size of the frame, the view can provide scroll bars so that the entire area of the child widget can be viewed. The child widget must be specified with setWidget()

Или это у меня спец. допуск к тайной информации? Улыбающийся
Записан
kobra
Гость
« Ответ #18 : Ноябрь 23, 2010, 03:15 »

что здесь имееться в виду под дочерним виджетом? тот которой я хочу вставить в DockWidget? Если да то ar->setWidget(this); делал уже не раз в итоге получал только то что иногда в окне у меня в дочернем окне пропадало названия
Записан
ufna
Гость
« Ответ #19 : Ноябрь 23, 2010, 03:43 »

dock widget <- scroll area <- your data widget

иерархия. В док виджет ты кидаешь виджет скролл арею, которой дитем назначаешь виджет с твоим содержимым, которое должно скроллится.

setWidget(this) не имеет смысла, т.к. setWidget(..) sets child widget.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



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

Мде, слов нет...

Цитировать
сомневаюсь, потому что я тоже ее читал, а я себя ламером не считаю.
Своим упорством невнимательного чтения документации вы доказываете обратное.
Вам же ДВА! раза давалась ссылка с примером:
Код
C++ (Qt)
QLabel *imageLabel = new QLabel;
QImage image("happyguy.png");
imageLabel->setPixmap(QPixmap::fromImage(image));
 
scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
Где вы видите установку лейаута на QScrollArea?

Вот правка вашего кода:
Код
C++ (Qt)
WindowData::WindowData():QScrollArea(){
   QWidget* base = new QWidget( this );
   setWidget( base );
   GridLayout = new QGridLayout( base );
   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);
}
« Последнее редактирование: Ноябрь 23, 2010, 09:15 от GreatSnake » Записан

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

нужно еще переписать resizeEvent для виджета? чтоб размер base менялся вместе с размером моего QScrollArea?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



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

Цитировать
нужно еще переписать resizeEvent для виджета? чтоб размер base менялся вместе с размером моего QScrollArea?
А какой смысл тогда использовать QScrollArea?
Записан

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

Потому что когда я сделал так как вы написали у меня ничего не отображаеться. Потом я делаю 
base->setMinimumSize(300,500);
И все хорошо когда у меня мало строк. Но когда я увеличиваю их количество то они снова накладаються друг на друга. Или мне нужно увеличивать у уменшать размер base когда я меняю количество строк?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #24 : Ноябрь 24, 2010, 14:21 »

Мде, ну никак человек не хочет читать документацию Грустный

Код
C++ (Qt)
#include <QApplication>
#include <QScrollArea>
#include <QLabel>
#include <QLineEdit>
#include <QGridLayout>
 
int main( int argc, char* argv[] )
{
QApplication app( argc, argv );
QScrollArea sa;
 
QWidget base( &sa );
sa.setWidget( &base );
 
QGridLayout l( &base );
 
for( int i = 0; i < 100; i++ )
{
l.addWidget( new QLabel( QString( "%1:" ).arg( i + 1 ) ), i, 0, Qt::AlignRight );
l.addWidget( new QLineEdit(), i, 1, 1, 20 );
}
 
#if 1 // сам выбирай, что тебе больше нравится
sa.setWidgetResizable( true );
#else
base.adjustSize();
#endif
 
sa.show();
return app.exec();
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
kobra
Гость
« Ответ #25 : Ноябрь 24, 2010, 19:52 »

Код:
	QWidget base( &sa );
sa.setWidget( &base );
вопрос какая разница между етими строками? Она разве не равноценні?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



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

Нет.
Первая задаёт родителя для нового объекта.
Вторая указывает какой виджет будет прокручиваться.
Записан

Qt 5.11/4.8.7 (X11/Win)
kobra
Гость
« Ответ #27 : Декабрь 03, 2010, 20:25 »

сегодня нашел один странный глюк. Когда мой QDockWidget в начале запуска программы не активен(а активна вкладка другого QDockWidget) и потом открыть первый, то все его виджеты в одном месте. Скрин ниже:
Записан
kobra
Гость
« Ответ #28 : Декабрь 06, 2010, 19:22 »

нет идей?
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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