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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QHBoxLayout  (Прочитано 6267 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Ноябрь 08, 2012, 14:04 »

Пытаюсь во вновь созданном окне разместить таблицу

Код:
    Table = new QTableWidget(this);
    hbLayout = new QHBoxLayout(this);

    Table->setColumnCount(4);
    Table->setRowCount(5);
    //Table->setGeometry(20,20,500,300);

    hbLayout = new QHBoxLayout(this);
    hbLayout->addWidget(Table);
    this->setLayout(hbLayout);

и почему-то при развертвование окна таблица не разворачивается Непонимающий
Хотя Layout использую.
Записан
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #1 : Ноябрь 08, 2012, 14:26 »

Код:
#include <QApplication>
#include <QWidget>
#include <QBoxLayout>
#include <QTableWidget>
#include <QHeaderView>

int main(int argc, char** argv) {
    QApplication app(argc, argv);

    QWidget wgt;
    QTableWidget* Table = new QTableWidget(&wgt);
    Table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    Table->setColumnCount(4);
    Table->setRowCount(5);
    //Table->setGeometry(20,20,500,300);

    QHBoxLayout* hbLayout = new QHBoxLayout(&wgt);
    hbLayout->addWidget(Table);
    wgt.setLayout(hbLayout);

    wgt.show();
    return app.exec();
}

Так занимает всю ширину. Если не использовать Table->horizontalHeader()->setResizeMode(QHeaderView::Stretch) - тоже таблица занимает всю ширину но столбцы нет.
п.с. зачем два раза строка hbLayout = new QHBoxLayout(this);?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #2 : Ноябрь 08, 2012, 14:36 »

Согласен. Опечатка.
Но дело в том. Что у меня MDI
Я создаю окно с таблицей и добавляю его.  Потом раскрываю окно , а таблица не разворачивается хотя Layout использую.
И в консоли приложения мне выдается:
QWidget::setLayout: Attempting to set QLayout "" on MdiChildJournal "", which already has a layout
« Последнее редактирование: Ноябрь 08, 2012, 14:39 от demaker » Записан
mutineer
Гость
« Ответ #3 : Ноябрь 08, 2012, 14:41 »

Цитировать
QMdiSubWindow has its own layout, which consists of the title bar and a center area for the internal widget.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #4 : Ноябрь 08, 2012, 14:48 »

И что мне делать в итоге?
Записан
_OLEGator_
Гость
« Ответ #5 : Ноябрь 08, 2012, 14:52 »

Читай же, тебе все написали - у тебя окну уже назначен layout, вот его и используй.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #6 : Ноябрь 08, 2012, 15:02 »

Код:
this->layout()->addWidget(Table);
сделал так все равно не помогает
И в консоле выдал
QMainWindowLayout::addItem: Please use the public QMainWindow API instead
« Последнее редактирование: Ноябрь 08, 2012, 15:12 от demaker » Записан
mutineer
Гость
« Ответ #7 : Ноябрь 08, 2012, 15:34 »

Код:
this->layout()->addWidget(Table);
сделал так все равно не помогает
И в консоле выдал
QMainWindowLayout::addItem: Please use the public QMainWindow API instead

this->widget()->setLayout(...)

Документацию даже после намека читать не хочешь?

Если центрального виджета нет, то лейаут не нужен и просто установи свою таблицу центральным виджетом
« Последнее редактирование: Ноябрь 08, 2012, 15:37 от mutineer » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #8 : Ноябрь 08, 2012, 15:45 »

Да я читал,
только

Код:
MdiChildJournal::MdiChildJournal(QWidget *parent):
    QMainWindow(parent)
{
    setAttribute(Qt::WA_DeleteOnClose);

    Table = new QTableWidget(this);
    Table->setColumnCount(4);
    Table->setRowCount(5);
   //qobject_cast<QMdiSubWindow*>(this)->widget; //НЕ ПРОКАТЫВАЕТ!!!
}

Записан
mutineer
Гость
« Ответ #9 : Ноябрь 08, 2012, 16:23 »

а это у тебя наследник QMdiSubWindow? Судя по конструктору это наследник QMainWindow
ну и widget это метод, а не поле
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #10 : Ноябрь 09, 2012, 09:16 »

Это понятно, что метод а не поле.

И что делать если это у меня наследник от QMainWindow?
Или сделать лучше так

Код:
class MdiChildJournal: public QMdiSubWindow,QMainWindow
{

}
« Последнее редактирование: Ноябрь 09, 2012, 09:19 от demaker » Записан
mutineer
Гость
« Ответ #11 : Ноябрь 09, 2012, 11:22 »

Если понятно, то почему нету скобок?

Откуда я знаю что делать? Я не знаю что ты хочешь сделать, где должен быть этот класс и зачем ты его наследовал от QMainWindow. Но как минимум не надо пытаться вызывать методы, которых просто нет
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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