QGridLayout

 
0
 
C++
ava
plica98 | 01.10.2013, 17:12
Добрый день, уважаемые Коллеги.

Возникла проблема с заданием размеров размещаемых виджетов.
Никак не получается задать разную ширину для виджетов lwg1, lwg2  и twg (см. ниже фрагмент текста)
Хочу чтобы ширина lwg1,lwg2 была в два раза меньше ширины twg.

Может я что-то ни так делаю ?
За ранее благодарю за помощь.



MainWindow::MainWindow()
{

    ................................


    QGridLayout *pgl = new QGridLayout();

    QStringList lst;
    twg = new QTreeWidget;
    twg->setContextMenuPolicy(Qt::CustomContextMenu);
    twg->setColumnCount(2);
    twg->setColumnWidth(0,120);

    lst << "Name1" << "Name2";
    twg->setHeaderLabels(lst);


    lst1 = new QLabel("Заголовок1");
    lst2 = new QLabel("Заголовок2");

    lwg1 = new QListWidget;
    lwg1->setContextMenuPolicy(Qt::CustomContextMenu);

    lwg2 = new QListWidget;
    lwg2->setContextMenuPolicy(Qt::CustomContextMenu);


    pgl->addWidget(twg,0,0,50,30);     // задание размеров ширина = 30
    pgl->addWidget(lst1,0,30,1,20);
    pgl->addWidget(lst2,0,50,1,20);
    pgl->addWidget(lwg1,1,30,49,20);  // задание размеров ширина = 20
    pgl->addWidget(lwg2,1,50,49,20);  // задание размеров ширина = 20

    QWidget *win = new QWidget;
    win->setLayout(pgl);
    setCentralWidget(win);

}




С уважением plica98.
Comments (5)
ava
math64 | 02.10.2013, 08:11 #
При добавлении виджетов в QGridLayout задаются не координаты, а номера строк и колонок (аналог в html - colspan и rowspan). У тебя большинство колонок и строк будут иметь нулевую ширину и высоту.
Используй 
void QGridLayout::setColumnMinimumWidth ( int column, int minSize ); 
 для задания минимальной ширины колонок и 
void QGridLayout::setColumnStretch ( int column, int stretch )
 для задания растяжения колонки. Для колонки дерева задай растяжение 2, для списков - 1.
Также можно использовать QSpacerItem.
ava
plica98 | 02.10.2013, 08:20 #
math64, спасибо.

Попробую.
ava
plica98 | 02.10.2013, 08:46 #

    pgl->addWidget(twg,0,0,50,30);     // задание размеров ширина = 30 колонок

Я так понимаю, что виджет дерева twg размещается в строке 0, колонке 0 и занимает 50 строк и 30 колонок.

    pgl->addWidget(lwg1,1,30,49,20);  // задание размеров ширина = 20 колонок

виджет списка lwg1 размещаются в строке 1, колонке 30 и занимает 49 строк и 20 колонок.


    pgl->addWidget(lwg2,1,50,49,20);  // задание размеров ширина = 20 колонок

виджет списка lwg2 размещаются в строке 1, колонке 50 и занимает 49 строк и 20 колонок.


или что-то я не так понимаю ?
ava
math64 | 03.10.2013, 07:30 #
Создай виджет с формой и отредактируй всё что тебе нужно в дизайнере.
Посмотри сгенерированный код в ui_mainwindow.h
Код (после упрощения) будет примерно такой:

    // twg расположен в колонке 0, минимальная ширина колонки - 30, растяжение - 3
    // занимает две строки 0 и 1.
    // высота строки 0 определяется высотой меток
    pgl->addWidget(twg,0,0,1,2);
    pgl->setColumnMinimumWidth (0, 30);
    pgl->setColumnStretch (0, 3);
    // Метки в строке 1 колонки 1 и 2 соответственно, ширина колонок - 20, растяжение - 2
    pgl->addWidget(lst1,1,0,1,1);
    pgl->setColumnMinimumWidth (1, 20);
    pgl->setColumnStretch (1, 2);
    pgl->addWidget(lst2,2,0,1,1);
    pgl->setColumnMinimumWidth (2, 20);
    pgl->setColumnStretch (2, 2);
    // Списки в строке 1
    pgl->addWidget(lwg1,1,1,1,1);
    pgl->addWidget(lwg2,2,1,1,1);

ava
plica98 | 04.10.2013, 13:32 #
math64, спасибо.

Все. Разобрался. Благодарю за помощь.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  plica98   math64
advanced
Submit