Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Компоновка виджетов. 
V
    Опции темы
Baton2007
Дата 5.9.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Почему не работает вот такой вид компоновки??
Код

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindowClass)
{
    ui->setupUi(this);

    closeButton= new QPushButton ("Close",this);
    insertButton= new QPushButton (this);
    slovoBox=new QComboBox(this);
    slovoBox->setEditable(true);
    transkRip=new QLineEdit(this);
    pereVod= new QListView(this);
    list= new QStringList;
    *list<<"a"<<"b"<<"c";
    model=new QStringListModel (*list);
    pereVod->setModel(model);
    pereVod->setSelectionMode(QAbstractItemView::ExtendedSelection);


// Далее компоновка не пашет
    layout=new QHBoxLayout;
    layout->addWidget(slovoBox);
    layout->addWidget(transkRip);
    layout->addWidget(pereVod);
    layout->addWidget(insertButton);
    setLayout(layout);

    Vlayout= new QVBoxLayout;
    Vlayout->addWidget(closeButton);
    setLayout(Vlayout);




    
    connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));
    connect(insertButton,SIGNAL(clicked()), this,SLOT(insert()));
}

MainWindow::~MainWindow()
{
    delete ui;
}


Делал вот так
Код

Qwidget *win= new Qwidget;
// это пашет
layout=new QHBoxLayout (win);
    layout->addWidget(slovoBox);
    layout->addWidget(transkRip);
    layout->addWidget(pereVod);
    layout->addWidget(insertButton);

// это нет
   Vlayout= new QVBoxLayout(win);
    Vlayout->addWidget(closeButton);
    win->show();

    
    


Это сообщение отредактировал(а) Baton2007 - 5.9.2009, 17:18
PM MAIL   Вверх
KL7
Дата 6.9.2009, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.12.2008
Где: Minsk City

Репутация: 2
Всего: 2



Цитата

void QWidget::setLayout ( QLayout * layout )
Sets the layout manager for this widget to layout.
If there already is a layout manager installed on this widget, QWidget won't let you install another. You must first delete the existing layout manager (returned by layout()) before you can call setLayout() with the new layout.
 © QAssistant

Если по русски, то у виджета layout только один, все остальное должно быть завернуто в него... Когда же ты пишешь setLayout(Vlayout); я бы предположил, что layout не добавляется, а перезаписывается... А на самом деле он и не добавляется, и не перезаписывается - фактически ничего не происходит...

Тебе стоит твои два layout-а завернуть в один большой (в какой - зависит от того, чего хочешь добится) и его установить на виджет... 
PM MAIL ICQ   Вверх
Baton2007
Дата 6.9.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



А каким образом их можно объединить??? smile  Я так понимаю это QGroupBox ?

Это сообщение отредактировал(а) Baton2007 - 6.9.2009, 19:49
PM MAIL   Вверх
andrew_121
Дата 7.9.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



Цитата(Baton2007 @  6.9.2009,  19:12 Найти цитируемый пост)
А каким образом их можно объединить???

в другой лайоут.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 7.9.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(Baton2007 @ 6.9.2009,  19:12)
А каким образом их можно объединить??? smile  Я так понимаю это QGroupBox ?

один layout можно поместить в другой - сделать вложенными, как виджеты.
PM   Вверх
KL7
  Дата 7.9.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.12.2008
Где: Minsk City

Репутация: 2
Всего: 2



Цитата(bsa @  7.9.2009,  11:21 Найти цитируемый пост)
один layout можно поместить в другой - сделать вложенными, как виджеты. 

дело говорит...  smile 

Baton2007, расскажи лучше, что ты хочешь в итоге получить... и тебе расскажу(т) как ето сделать layout-ами...

вот пример (из C++ GUI Programming with Qt 4, Second Edition by Jasmin Blanchette)

Код

FindFileDialog::FindFileDialog(QWidget *parent)
    : QDialog(parent)
{
    ...
    QGridLayout *leftLayout = new QGridLayout;
    leftLayout->addWidget(namedLabel, 0, 0);
    leftLayout->addWidget(namedLineEdit, 0, 1);
    leftLayout->addWidget(lookInLabel, 1, 0);
    leftLayout->addWidget(lookInLineEdit, 1, 1);
    leftLayout->addWidget(subfoldersCheckBox, 2, 0, 1, 2);
    leftLayout->addWidget(tableWidget, 3, 0, 1, 2);
    leftLayout->addWidget(messageLabel, 4, 0, 1, 2);

    QVBoxLayout *rightLayout = new QVBoxLayout;
    rightLayout->addWidget(findButton);
    rightLayout->addWidget(stopButton);
    rightLayout->addWidget(closeButton);
    rightLayout->addStretch();
    rightLayout->addWidget(helpButton);

    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(leftLayout);
    mainLayout->addLayout(rightLayout);
    setLayout(mainLayout);

    setWindowTitle(tr("Find Files or Folders"));
}



а вот что в итоге
user posted image
PM MAIL ICQ   Вверх
Baton2007
Дата 9.9.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



В итоге планируется получить вот это
user posted image
PM MAIL   Вверх
bsa
Дата 9.9.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Baton2007, главный layout - QHBoxLayout
На него добавляешь 2 QVBoxLayout (левый и правый).
На левый добавляешь QHBoxLayout, к которому подключаешь QComboBox и QTextEdit, и виджет редактирования времени.
На правый добавляешь QListWidget, и две QPushButton.

В дизайнере это сделать проще простого!

Это сообщение отредактировал(а) bsa - 9.9.2009, 23:24
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.