Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Ноябрь 08, 2012, 14:04



Название: QHBoxLayout
Отправлено: demaker от Ноябрь 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 использую.


Название: Re: QHBoxLayout
Отправлено: torwig от Ноябрь 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);?


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


Название: Re: QHBoxLayout
Отправлено: mutineer от Ноябрь 08, 2012, 14:41
Цитировать
QMdiSubWindow has its own layout, which consists of the title bar and a center area for the internal widget.


Название: Re: QHBoxLayout
Отправлено: demaker от Ноябрь 08, 2012, 14:48
И что мне делать в итоге?


Название: Re: QHBoxLayout
Отправлено: _OLEGator_ от Ноябрь 08, 2012, 14:52
Читай же, тебе все написали - у тебя окну уже назначен layout, вот его и используй.


Название: Re: QHBoxLayout
Отправлено: demaker от Ноябрь 08, 2012, 15:02
Код:
this->layout()->addWidget(Table);
сделал так все равно не помогает
И в консоле выдал
QMainWindowLayout::addItem: Please use the public QMainWindow API instead


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

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

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

Если центрального виджета нет, то лейаут не нужен и просто установи свою таблицу центральным виджетом


Название: Re: QHBoxLayout
Отправлено: demaker от Ноябрь 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; //НЕ ПРОКАТЫВАЕТ!!!
}



Название: Re: QHBoxLayout
Отправлено: mutineer от Ноябрь 08, 2012, 16:23
а это у тебя наследник QMdiSubWindow? Судя по конструктору это наследник QMainWindow
ну и widget это метод, а не поле


Название: Re: QHBoxLayout
Отправлено: demaker от Ноябрь 09, 2012, 09:16
Это понятно, что метод а не поле.

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

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

}


Название: Re: QHBoxLayout
Отправлено: mutineer от Ноябрь 09, 2012, 11:22
Если понятно, то почему нету скобок?

Откуда я знаю что делать? Я не знаю что ты хочешь сделать, где должен быть этот класс и зачем ты его наследовал от QMainWindow. Но как минимум не надо пытаться вызывать методы, которых просто нет