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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: GridLayout, как максимально растянуть виджет?  (Прочитано 14046 раз)
Alchazar
Гость
« : Январь 12, 2010, 10:46 »

Есть GridLayout с 3-мя столбиками. 1 и 2 имеют фиксированную ширину, а третий должен растягиваться (или я ошибаюсь?) когда меняется размер окна, но он не растягивается. Виджет в третем столбике всегда минимальный.

QGridLayout
Код
C++ (Qt)
   QGridLayout *gridLayout;
   gridLayout = new QGridLayout();
 
   gridLayout->setMargin(4);
   gridLayout->setSpacing(2);
   gridLayout->setColumnMinimumWidth(0, 60);
   gridLayout->setColumnMinimumWidth(1, 45);
   gridLayout->setColumnStretch(0, 0);
   gridLayout->setColumnStretch(1, 1);
   gridLayout->setColumnStretch(2, 2);
 
   gridLayout->addWidget(lbl_CurrentText = new QLabel(CurrentText), 0, 0, Qt::AlignLeft);
   gridLayout->addWidget(lbl_CurrentVal = new QLabel(CurrentVal), 0, 1, Qt::AlignLeft);
 
   gridLayout->addWidget(lbl_WorstText = new QLabel(WorstText), 1, 0, Qt::AlignLeft);
   gridLayout->addWidget(lbl_WorstVal = new QLabel(WorstVal), 1, 1, Qt::AlignLeft);
 
   gridLayout->addWidget(lbl_TrshText = new QLabel(TrshText), 2, 0, Qt::AlignLeft);
   gridLayout->addWidget(lbl_TrshVal = new QLabel(TrshVal), 2, 1, Qt::AlignLeft);
 
   gridLayout->addWidget(lbl_Leg1Text = new QLabel(Leg1Text), 3, 0, Qt::AlignLeft);
   gridLayout->addWidget(lbl_Leg1Val = new QLabel(Leg1Val), 3, 1, Qt::AlignLeft);
 
   gridLayout->addWidget(lbl_Leg2Text = new QLabel(Leg2Text), 4, 0, Qt::AlignLeft);
   gridLayout->addWidget(lbl_Leg2Val = new QLabel(Leg2Val), 4, 1, Qt::AlignLeft);
 
   gridLayout->addWidget(plot_data = new QwtPlot(), 0, 2, 5, 1, Qt::AlignLeft);
 
   curve_line1 = new QwtPlotCurve;
   curve_backg1 = new QwtPlotCurve;
 
   m_line = new QwtPlotMarker;
 
   setLayout(gridLayout);

Третий виджет, который должен бы растянуться
Код
C++ (Qt)
void setPlot(const double &plotMin, const double &plotMax,  const double &plotStep)
       {
           QFont plotFont("Times", 8, QFont::Light);
           plot_data->setCanvasLineWidth(0);
           plot_data->setAxisScale(0, plotMin, plotMax, plotStep);
           plot_data->setAxisFont(0, plotFont);
           plot_data->setMinimumSize(195, 100);
           plot_data->setMaximumSize(16000, 300);
           plot_data->enableAxis(2,false);
           plot_data->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
       }
Записан
Marat(Qt)
Гость
« Ответ #1 : Январь 12, 2010, 16:14 »

Очень вероятно что проблема здесь:
Код:
plot_data->enableAxis(2,false);
Как ее решить - проблема qwt, в котором я не разбираюсь, в любом случае, попробуйте закомментировать эту строку и посмотреть что получится.
Записан
Alchazar
Гость
« Ответ #2 : Январь 12, 2010, 16:20 »

Код:
plot_data->enableAxis(2,false);
тут не при чём, попробовал закоментировать, ничего не изменилось.
Если график помещать в QVBoxLayout он принимает максимальные размеры. Может QGridLayout не растягивает помещёные в него виджеты как QVBoxLayout?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Январь 12, 2010, 16:23 »

Замени

Код
C++ (Qt)
gridLayout->setColumnStretch(0, 0);
gridLayout->setColumnStretch(1, 1);
gridLayout->setColumnStretch(2, 2);

на

Код
C++ (Qt)
gridLayout->setColumnStretch(2, 1);
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Marat(Qt)
Гость
« Ответ #4 : Январь 12, 2010, 16:26 »

Блин, я так понимаю, пустое пространство слева от QwtPlot - это выросшая вторая колонка? А чем объяснить пробел справа?
« Последнее редактирование: Январь 12, 2010, 16:30 от Marat(Qt) » Записан
Alchazar
Гость
« Ответ #5 : Январь 12, 2010, 17:51 »

Код:
gridLayout->setColumnStretch(2, 1);
не помогает.
Я думаю, что размер колонок нормальный, только сам график не хочет вытягиваться.
Записан
Alchazar
Гость
« Ответ #6 : Январь 12, 2010, 17:58 »

Попробовал вставить QLineEdit вместо графика, результат тот же.
Что-то где-то я не замечаю.
Записан
BRE
Гость
« Ответ #7 : Январь 12, 2010, 18:01 »

Набросал пример:
Записан
Marat(Qt)
Гость
« Ответ #8 : Январь 12, 2010, 20:59 »

Я так тоже делал, причем вместо QFrame у меня QwtPlot был и все работало в preview как положено.
Записан
Alchazar
Гость
« Ответ #9 : Январь 13, 2010, 15:08 »

Посмотрел пример, попробовал вставить QwtPlot вместо QFrame, в дизайнере всё работает.
Переделал свою форму (положил в GroupBox VerticalLayout и уже в него засунул gridLayout), но ничего не изменилось. Пробовал ложить VerticalLayout в gridLayout вместо QwtPlot, а QwtPlot ложил в VerticalLayout, но всё равно результат тот же, только график рисовался с правого края не смотря на то, что Qt::AlignLeft.
Записан
Alchazar
Гость
« Ответ #10 : Январь 13, 2010, 15:55 »

Сделал немного по другому:
все QLabel положил в GridLayout, а потом GridLayout и QwtPlot положил в HorizontalLayout.
Теперь всё растягивается как следует)
Записан
BRE
Гость
« Ответ #11 : Январь 13, 2010, 15:56 »

Ты на политики виджетов обрати внимание (QSizePolicy).
Записан
Alchazar
Гость
« Ответ #12 : Январь 13, 2010, 16:33 »

Пробовал их менять, ничего не помогло.
Записан
Marat(Qt)
Гость
« Ответ #13 : Январь 13, 2010, 18:18 »

Сделал немного по другому:
все QLabel положил в GridLayout, а потом GridLayout и QwtPlot положил в HorizontalLayout.
Теперь всё растягивается как следует)
Из этого ответа очевидно что вы напортачили со свойствами gridlayout. Для нормальной работы достаточно было трех столбцов, первые два - label'ы, третий - qwtPlot. Все свойства грида оставить такими, какими они были по умолчанию. Так тоже должно работать, по крайней мере я в дизайнере так делал.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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