Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Прикрепляемый виджет

Автор: AD 17.6.2008, 14:52

Ну собственно вот картинки на которых видна проблема:
[attachment=113:1.JPG]

[attachment=114:2.JPG]

На первой картинке слева виджет с QTreeWidget прикреплен. Как сделать, чтобы этот виджет был явно виден?

Вот код создания прикрепляемого виджета:

/// Создание прикрепляемых виджетов
void TLV::createDockWidgets()
{
    QDockWidget* dock = new QDockWidget(this);
    dock -> setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    treePhaseView = new QTreeWidget(this);
    treePhaseView->setObjectName(QString::fromUtf8("treePhaseView"));
    treePhaseView->headerItem()->setText(0, QApplication::translate("TLVClass", "", 0, QApplication::UnicodeUTF8));
    dock -> setWidget(treePhaseView);
    addDockWidget(Qt::LeftDockWidgetArea, dock);
}


Вот код, сгенеренный создания других элементов окна!
/// Инициализация и установка нужных размеров окна приложения
void Ui_TLVClass::setupUi(QMainWindow *TLVClass)
{
    if (TLVClass->objectName().isEmpty())
        TLVClass->setObjectName(QString::fromUtf8("TLVClass"));
    TLVClass->resize(942, 776);
    QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    sizePolicy.setHorizontalStretch(0);
    sizePolicy.setVerticalStretch(0);
    sizePolicy.setHeightForWidth(TLVClass->sizePolicy().hasHeightForWidth());
    TLVClass->setSizePolicy(sizePolicy);
    TLVClass->setMinimumSize(QSize(200, 200));
    centralWidget = new QWidget(TLVClass);
    centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
    gridLayout = new QGridLayout(centralWidget);
    gridLayout->setSpacing(6);
    gridLayout->setMargin(11);
    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
    trackView = new QTrackWidget(centralWidget);
    trackView->setObjectName(QString::fromUtf8("trackView"));
    sizePolicy.setHeightForWidth(trackView->sizePolicy().hasHeightForWidth());
    trackView->setSizePolicy(sizePolicy);
    trackView->setMinimumSize(QSize(160, 200));

    gridLayout->addWidget(trackView, 0, 0, 1, 1);

    TLVClass->setCentralWidget(centralWidget);
    menuBar = new QMenuBar(TLVClass);
    menuBar->setObjectName(QString::fromUtf8("menuBar"));
    menuBar->setGeometry(QRect(0, 0, 942, 21));
    TLVClass->setMenuBar(menuBar);

    retranslateUi(TLVClass);
    QMetaObject::connectSlotsByName(TLVClass);
}

/// Оглавление окна приложения
void Ui_TLVClass::retranslateUi(QMainWindow *TLVClass)
{
    TLVClass->setWindowTitle(QApplication::translate("TLVClass", "TransasLogView", 0, QApplication::UnicodeUTF8));
    Q_UNUSED(TLVClass);
}

Сможете подсказать в чем ошибочка? Делал по приведенному примеру в примерах Qt!

Автор: AD 17.6.2008, 17:39

Другого решения не нашел, как делать через дизайнер. Но теперь у меня не получается добиться того, чтобы QWidget, на котором будет траектория полета (должен быть самым большим виджетом), QTreeWidget (дерево этапов полета), QDockWidget (в котором этом дерево размещается) правильно размещались в лэйауте. Помогите, пожалуйста!

Автор: Litkevich Yuriy 17.6.2008, 18:00

ну подсмотри как дизайнер это делает (uic my.ui -o my.h)

Автор: AD 17.6.2008, 18:04

Цитата(Litkevich Yuriy @ 17.6.2008, 19:00) *
ну подсмотри как дизайнер это делает (uic my.ui -o my.h)

Да блин, хреново он делает. Не так как я хочу!!!

Автор: Litkevich Yuriy 17.6.2008, 18:13

а файлик прикрепить можешь, который ui, и описать как бы ты хотел?

Автор: sploid 17.6.2008, 18:18

а форму можешь выложить?

Автор: Litkevich Yuriy 17.6.2008, 18:22

Цитата(AD @ 17.6.2008, 21:39) *
правильно размещались в лэйауте.

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

Автор: AD 17.6.2008, 18:29

Цитата(Litkevich Yuriy @ 17.6.2008, 19:22) *
Цитата(AD @ 17.6.2008, 21:39) *
правильно размещались в лэйауте.

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

Вот так, я хочу чтобы было (только, конечно, в прикрепленном виджете)
[attachment=115:p1.JPG]

А вот так он в форме выравнивает.
[attachment=116:p2.JPG]

Вот так это выглядит уродливо:
[attachment=117:p3.JPG]

Автор: Litkevich Yuriy 17.6.2008, 18:35

во-превых, добавь компоновщик в доквиджет, выдели доквиджет и нажми вертикальный или горизонтальный компоновщик.
во вторых, (ща гляну как в дизайнере зделать :) )

Автор: AD 17.6.2008, 18:40

Цитата(Litkevich Yuriy @ 17.6.2008, 19:35) *
во-превых, добавь компоновщик в доквиджет, выдели доквиджет и нажми вертикальный или горизонтальный компоновщик.
во вторых, (ща гляну как в дизайнере зделать :) )

Вот описание того, как я делал:
- добавил нужные элементы
- задал нужные имена и свойства этим элементам
- задал размеры элементов
- щелкнул на форму, и сделал "Add in Grid Layout!"

Автор: Litkevich Yuriy 17.6.2008, 18:52

Убей лишние компоновщики и поновой:
во-превых,
выдели вложеный виджет в доквиджет, установи требуемый МАКСИМАЛЬНЫЙ размер по горизонтали, установи политику по горизонтали фиксированой;
во-вторых,
выдели доквиджет, нажми кнопку подогнать размер, установи политику горизонтального размера фиксированой;
в-третьих,
Выдели виджет родительский для дока и твоего графика, нажми кнопку горизонтальной компоновки.

Поидее все должно стать путем, навсякий случай тестовый ГУЙ  dock.zip ( 651 байт ) : 205

Автор: AD 17.6.2008, 18:57

Цитата(Litkevich Yuriy @ 17.6.2008, 19:52) *
в-третьих,
Выдели виджет родительский для дока и твоего графика, нажми кнопку горизонтальной компоновки.

Поидее все должно стать путем, навсякий случай тестовый ГУЙ  dock.zip ( 651 байт ) : 205

все вроде понятно, кроме последнего! Как понять родительский виджет для дока?

Автор: Litkevich Yuriy 17.6.2008, 19:08

тот на который ты доквиджет кладешь

короче косячек какой-то либо в дизайнере либо в моей голове. Док в приведенном мной выше файле лежит в центральном виджете, что неправильно, его надо положить на сам майнвиндоу.
я это сделал руками с помощью текстового редактора, ui-файл отредактировал.
И не врублюсь как это в дизайнере сделать.

Автор: AD 17.6.2008, 19:13

Цитата(Litkevich Yuriy @ 17.6.2008, 20:08) *
тот на который ты доквиджет кладешь

короче косячек какой-то либо в дизайнере либо в моей голове. Док в приведенном мной выше файле лежит в центральном виджете, что неправильно его надо положить на сам майнвиндоу.
я это сделал руками с помощью текстового редактора, ui-файл отредактировал.
И не врублюсь как это в дизайнере сделать.

Огромное спасибо! Получилось!!! :)

Правда размер прикрепленного виджета нельзя изменять, но это уже мелочи! :) Спасибо!

Автор: Litkevich Yuriy 17.6.2008, 19:37

а как сделал?
вот я переделал в редакторе (текстовом)  dock.zip ( 768 байт ) : 191

максимальный размер удалил и политику размера сделал растягиваемую, помоему получилось то что надо.

Но про дизайнер ниче непойму:

Цитата
When added to a form, dock widgets are not placed in any particular dock area by default; you need to set the docked property to true for each widget and choose an appropriate value for its dockWidgetArea property.

Где эти
docked property
dockWidgetArea property
я их ни в доквиджете ненашел ни в майн виндоу

:(

Автор: AD 17.6.2008, 19:43

Цитата(Litkevich Yuriy @ 17.6.2008, 20:37) *
а как сделал?
вот я переделал в редакторе (текстовом)  dock.zip ( 768 байт ) : 191

максимальный размер удалил и политику размера сделал растягиваемую, помоему получилось то что надо.

Но про дизайнер ниче непойму:
Цитата
When added to a form, dock widgets are not placed in any particular dock area by default; you need to set the docked property to true for each widget and choose an appropriate value for its dockWidgetArea property.

Где эти
docked property
dockWidgetArea property
я их ни в доквиджете ненашел ни в майн виндоу

:(

Сделал именно так, как ты и сказал! :)
А эти свойства разве нельзя установить
Цитата
allowedAreas : Qt::DockWidgetAreas
This property holds areas where the dock widget may be placed.
The default is Qt::AllDockWidgetAreas.
Access functions:
Qt::DockWidgetAreas allowedAreas () const
void setAllowedAreas ( Qt::DockWidgetAreas areas )
See also Qt::DockWidgetArea.
?

Автор: Litkevich Yuriy 17.6.2008, 20:03

а толку то, если ты
allowedAreas
dockWidgetArea
в дизайнере устанавливаешь, то он не меняет своего поведения, т.е. если ты в предпросмотре доквиджет сделаешь плавающим, то он потом парковаться не вкакую не хочет.
А если как я подправляя файл руками. то нормально и с размером тоже нормально, можно соорудить простенький по моей методе, и сгенерит исходник, а там уже посмотреть как их програмно надо делать.

---
разница в генерируемом с++ файле только в одной строчке:

dockWidget = new QDockWidget(centralwidget);
dockWidget = new QDockWidget(MainWindow);


как заставить дизайнер коректно размещать док виджет - тема научной работы :)

Ладно пошел я бай, а то завтра вставать рано.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)