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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы c setLayout()  (Прочитано 11881 раз)
Astrologer
Гость
« : Сентябрь 13, 2010, 10:11 »

Всем привет. У меня есть MainWindow и класс QdbfReader наследующий от QWidget.
Mainwindow.cpp
Код:
 QDbfReader* reader = new QDbfReader(this);
 setCentralWidget(reader);
А в коде QdbReader'a я добавляю layouts.
Код:
void QDbfReader::addWidgets()
{
    view = new QTableView(this);
    mainLayout = new QHBoxLayout(this);
    verticalLayout = new QVBoxLayout(this);
    button = new QPushButton(this);
    list_widget = new QListWidget(this);

    button->setText("SQL");

    view->setModel(model);//bind model to the viewer

    view->resizeColumnsToContents();
    view->resizeRowsToContents();

    for (int i = 0; i < DBFlist.count(); i++)
        list_widget->addItem(QString::number(i) + " . " + DBFlist[i]);

    list_widget->setWordWrap(true);

    verticalLayout->addWidget(view);
    verticalLayout->addWidget(list_widget);

    mainLayout->addLayout(verticalLayout);
    mainLayout->addWidget(button);
    setLayout(mainLayout);
}

Однако выводится предупреждение -
QLayout: Attempting to add QLayout "" to QDbfReader "", which already has a layout

И иногда(!) форма не отображается. Что я делаю не так? Всем заранее спасибо.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Сентябрь 13, 2010, 10:15 »

Код
C++ (Qt)
   mainLayout = new QHBoxLayout(this);
   verticalLayout = new QVBoxLayout(this);
 

На QdbfReader вешаете 2 layout-a....
Записан

Qt 5.11/4.8.7 (X11/Win)
Astrologer
Гость
« Ответ #2 : Сентябрь 13, 2010, 10:16 »

А как же сделать? Мне нужно раскомпоновать несколько layouts?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Сентябрь 13, 2010, 10:19 »

verticalLayout = new QVBoxLayout();
Записан

Qt 5.11/4.8.7 (X11/Win)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Сентябрь 13, 2010, 10:19 »

У лайотов парента не указывай.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alexeysun
Гость
« Ответ #5 : Сентябрь 13, 2010, 12:31 »

У лайотов парента не указывай.

Родитель нужен только у базового лэйоута (в твоем случае mainLayout), собственно тем самым ты даешь управление окном этому лэйоуту.
Записан
petro_xmara
Гость
« Ответ #6 : Декабрь 30, 2010, 12:07 »

а как можно во время работы программы менять layout у одного виджета?

Код
C++ (Qt)
if(name=="main")
   {
       setLayout(mainLayout);
   }
   else if(name=="second")
   {
       setLayout(secondLayout);
   }
 

так выдает ошибку

QWidget::setLayout: Attempting to set QLayout "" on bdialog "", which already has a layout
Записан
Fat-Zer
Гость
« Ответ #7 : Декабрь 30, 2010, 13:35 »

QStackedLayout вам в помощь...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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