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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как организовать правильное рпасположние Layout?  (Прочитано 4429 раз)
Amidomaru
Гость
« : Июль 20, 2009, 06:35 »

Добрый день!!! В процессе создания интерфейса программы мне посоветовали воспользоваться Layout. Но появились в полне закономерные вопросы.
1) Как организовать Layout чтобы форма была разделена примерно так:
---------------------------------------|
|             |                                       |
|             |              2                       |  1 - Область для кнопок и всякой другой ....
|             |                                       |  2- график 1.
|       1    |________________________ |  3- гафик 2.
|             |                                       |
|             |                3                     |
|             |                                       |
|             |                                       |
-----------------------------------------
2) Как заставит Пайнт Ивент сидеть в рамках своего Layout.
3) КАК задать динамические размеры Layout что-бы при изменении размеров формы их размеры менялись.
Зарание спасибо!!!
Записан
uriel
Гость
« Ответ #1 : Июль 20, 2009, 07:10 »

1) Если кодом, то примерно так:
Код
C++ (Qt)
QWidget *wgt = new QWidget();
QGridLayout *ly = new QGridLayout(wgt);
 
ly->addWidget(..., 0, 0, 2, 1); // 0 ряд, 0 столбец, занимать 2 строки и 1 столбец
ly->addWidget(..., 1, 1); // 1 ряд, 1 столбец, занимать только одну ячейку (хотя можно было бы и 1, 1 в конце добавить для наглядности)
ly->addWidget(..., 2, 1); // 2 ряд, 1 столбец, занимать только одну ячейку
2) Честно говоря, немного не понял сути вопроса. PaintEvent работает а рамках одного виджета, если я ничего не путаю, и ему должно быть безразлично на то, какие компоновщики установлены.
3) Так на то он и layout, чтобы менять размеры динамически. Улыбающийся
Если считать, что в приведённом в пункте 1 примере wgt - это "форма", то всё будет работать, как и ожидается.
Записан
Amidomaru
Гость
« Ответ #2 : Июль 20, 2009, 07:15 »

По поводу второго пункта.
Вот примерно то что я хочу запихать в область 2:
_____.h
#ifndef TRANING_H
#define TRANING_H

#include <QtGui/QMainWindow>
#include <QPainter>
#include <QWidget>
#include <math.h>
namespace Ui
{
    class Traning;
}

class Traning : public QMainWindow
{
    Q_OBJECT

public:
    Traning(QWidget *parent = 0);
    ~Traning();

private:
    Ui::Traning *ui;
};

class My_Paint_Widget:public QWidget
{
 void My_Paint_Widget::paintEvent ( QPaintEvent * e)
{
    QPainter p;
    QPen pen(QColor(Qt::red), 3);
    p.begin(this);
    p.setPen(pen);
    int st=10;
    for (float d=0;d<20;d=d+0.05)
   {
       st++;
   p.drawPoint(st,sin(d)*50+70);
   }
p.drawLine( 10,10,10,110);
    p.end();
}
};
#endif // TRANING_H


main.cpp
#include <QtGui/QApplication>
#include "traning.h"
#include <QPainter>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Traning w;
    My_Paint_Widget *p=new My_Paint_Widget();
    w.setCentralWidget(p);
    w.show();

    return a.exec();
}

Как видо виджет является центральным, а его надо поместить в специально отведёную область.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июль 20, 2009, 07:18 »

1) виджеты 2 и 3 помещены в вертикальный компоновщик (QVBoxLayout) №1, Виджет 1 и компоновщик №1 помещены в горизонтальный компоновщик (QHBoxLayout) окна, т.е. установленный для виджета верхнего уровня.
2) Рисование к компоновщику не относится, оно относится только к виджету.
3) см. п.1 про последний компоновщик.
Записан

Юра.
ufna
Гость
« Ответ #4 : Июль 20, 2009, 07:18 »

1. кроме грид лейаута можно использовать QVBoxLayout для 2 и 3, а затем все впихнуть в QHBoxLayout: 1, <QVBoxLayout>
2. создай лейаут как описали выше, и в него засовывай созданные тобой виджеты. Затем создаешь в конструкторе Trainging обычный QWidget, назначаешь ему созданный лейаут, а затем - делаешь его, этот виджет, центральным.
Записан
Amidomaru
Гость
« Ответ #5 : Июль 20, 2009, 07:20 »

1) виджеты 2 и 3 помещены в вертикальный компоновщик (QVBoxLayout) №1, Виджет 1 и компоновщик №1 помещены в горизонтальный компоновщик (QHBoxLayout) окна, т.е. установленный для виджета верхнего уровня.
Может а эм... почему не наооборот?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Июль 20, 2009, 07:23 »

>>Может а эм... почему не наооборот?
что значит наоборот?
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Июль 20, 2009, 07:29 »

вообще тема неоднократно поднималась, про работу в дезайнере. Лучшеб ты это в коде проделал, сразу вопросы бы отпали.

Выделяешь виджеты 2 и 3, брошеные на форму, либо через контекстное меню, либо через панель инструментов выбираешь вертикальную компоновку.
Выделяешь родительский виджет (форму) и , либо через контекстное меню, либо через панель инструментов выбираешь горизонтальную компоновку (при этом копоновщик не просто содаётся и принмает всё что в родительском виджете, но и устанавливается в качестве единственного компоновщика для родительского виджета).

П.С. при последней операции компоновщик не рисуется (красный прямоугольник), но попробуй поменть размер увидишь, что он есть.
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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