Название: Как организовать правильное рпасположние Layout? Отправлено: Amidomaru от Июль 20, 2009, 06:35 Добрый день!!! В процессе создания интерфейса программы мне посоветовали воспользоваться Layout. Но появились в полне закономерные вопросы.
1) Как организовать Layout чтобы форма была разделена примерно так: ---------------------------------------| | | | | | 2 | 1 - Область для кнопок и всякой другой .... | | | 2- график 1. | 1 |________________________ | 3- гафик 2. | | | | | 3 | | | | | | | ----------------------------------------- 2) Как заставит Пайнт Ивент сидеть в рамках своего Layout. 3) КАК задать динамические размеры Layout что-бы при изменении размеров формы их размеры менялись. Зарание спасибо!!! Название: Re: Как организовать правильное рпасположние Layout? Отправлено: uriel от Июль 20, 2009, 07:10 1) Если кодом, то примерно так:
Код 2) Честно говоря, немного не понял сути вопроса. PaintEvent работает а рамках одного виджета, если я ничего не путаю, и ему должно быть безразлично на то, какие компоновщики установлены. 3) Так на то он и layout, чтобы менять размеры динамически. :) Если считать, что в приведённом в пункте 1 примере wgt - это "форма", то всё будет работать, как и ожидается. Название: Re: Как организовать правильное рпасположние Layout? Отправлено: Amidomaru от Июль 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(); } Как видо виджет является центральным, а его надо поместить в специально отведёную область. Название: Re: Как организовать правильное рпасположние Layout? Отправлено: lit-uriy от Июль 20, 2009, 07:18 1) виджеты 2 и 3 помещены в вертикальный компоновщик (QVBoxLayout) №1, Виджет 1 и компоновщик №1 помещены в горизонтальный компоновщик (QHBoxLayout) окна, т.е. установленный для виджета верхнего уровня.
2) Рисование к компоновщику не относится, оно относится только к виджету. 3) см. п.1 про последний компоновщик. Название: Re: Как организовать правильное рпасположние Layout? Отправлено: ufna от Июль 20, 2009, 07:18 1. кроме грид лейаута можно использовать QVBoxLayout для 2 и 3, а затем все впихнуть в QHBoxLayout: 1, <QVBoxLayout>
2. создай лейаут как описали выше, и в него засовывай созданные тобой виджеты. Затем создаешь в конструкторе Trainging обычный QWidget, назначаешь ему созданный лейаут, а затем - делаешь его, этот виджет, центральным. Название: Re: Как организовать правильное рпасположние Layout? Отправлено: Amidomaru от Июль 20, 2009, 07:20 1) виджеты 2 и 3 помещены в вертикальный компоновщик (QVBoxLayout) №1, Виджет 1 и компоновщик №1 помещены в горизонтальный компоновщик (QHBoxLayout) окна, т.е. установленный для виджета верхнего уровня. Может а эм... почему не наооборот?Название: Re: Как организовать правильное рпасположние Layout? Отправлено: lit-uriy от Июль 20, 2009, 07:23 >>Может а эм... почему не наооборот?
что значит наоборот? Название: Re: Как организовать правильное рпасположние Layout? Отправлено: lit-uriy от Июль 20, 2009, 07:29 вообще тема неоднократно поднималась, про работу в дезайнере. Лучшеб ты это в коде проделал, сразу вопросы бы отпали.
Выделяешь виджеты 2 и 3, брошеные на форму, либо через контекстное меню, либо через панель инструментов выбираешь вертикальную компоновку. Выделяешь родительский виджет (форму) и , либо через контекстное меню, либо через панель инструментов выбираешь горизонтальную компоновку (при этом копоновщик не просто содаётся и принмает всё что в родительском виджете, но и устанавливается в качестве единственного компоновщика для родительского виджета). П.С. при последней операции компоновщик не рисуется (красный прямоугольник), но попробуй поменть размер увидишь, что он есть. |