Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: zodiac от Ноябрь 20, 2008, 22:59



Название: Табличное расположение QLabel
Отправлено: zodiac от Ноябрь 20, 2008, 22:59
Необходимо на виджете сделать таблицу из qlabel (т.е. чтобы qlabel выглядели просто ровно). Пробовал через qgridlayout, но он убого это делает. Все куда-то уехжает и т.п. Надо разместить qlabel в n строчек (могут быть пустые места) и в m столбцов. Qlabel 70*100. Как это лучше всего сделать?


Название: Re: Табличное расположение QLabel
Отправлено: Пантер от Ноябрь 21, 2008, 07:12
QGridLayout отлично все делает, читай доки по нему.


Название: Re: Табличное расположение QLabel
Отправлено: kirill от Ноябрь 21, 2008, 08:21
Как вариант использовать QTableWidget


Название: Re: Табличное расположение QLabel
Отправлено: spirit от Ноябрь 21, 2008, 09:08
да, оптимальнее заюзать QTableWidget, на крайняк QTableView. скорость будет выше, тут я с kirill'ом согласен.


Название: Re: Табличное расположение QLabel
Отправлено: zodiac от Ноябрь 21, 2008, 15:08
Код:
	QGridLayout *mainLayout = new QGridLayout;
mainLayout->setContentsMargins(1, 1, 1, 1);

element *test1 = new QLabel;
element *test2 = new QLabel;
element *test3 = new QLabel;
element *test4 = new QLabel;

QSpacerItem *spacer = new QSpacerItem(70, 100, QSizePolicy::Fixed);

test1->setText("111");
test2->setText("222");
test3->setText("333");
test4->setText("444");

test1->setStyleSheet("background: white; border: 1px solid black;");
test2->setStyleSheet("background: red; border: 1px solid black;");
test3->setStyleSheet("background: blue; border: 1px solid black;");
test4->setStyleSheet("background: blue; border: 1px solid black;");

test1->setFixedSize(70, 100);
test2->setFixedSize(70, 100);
test3->setFixedSize(70, 100);
test4->setFixedSize(70, 100);

mainLayout->addWidget(test1, 0, 0, 0, 18);
mainLayout->addItem(spacer, 0, 1, 0, 18);
mainLayout->addWidget(test2, 0, 2, 0, 18);
mainLayout->addWidget(test3, 1, 0, 2, 18);
//mainLayout->addWidget(test4, 1, 1, 2, 18);

setLayout(mainLayout);
Ну и где это нормально?


Название: Re: Табличное расположение QLabel
Отправлено: pastor от Ноябрь 21, 2008, 15:31
Ну и где это нормально?

А что неустраивает? Скрин приложи хоть

ЗЫ: Делал точно такую таблицу на лейблах с использование QGridLayout - проблем никаких


Название: Re: Табличное расположение QLabel
Отправлено: zodiac от Ноябрь 22, 2008, 20:36
http://zodiac.egghost.ru/node/28 (http://zodiac.egghost.ru/node/28)
Во-первых, между qlabel большое расстояние (между строками), а во-вторых, надо бы начинать рисовать с левого верхнего угла. Пробовал делать выравнивание, но они начинают наползать друг на друга. Щас буду пробовать рисовать по координатам.


Название: Re: Табличное расположение QLabel
Отправлено: pastor от Ноябрь 22, 2008, 20:43
Судя по скриншоту, лайаут расятнулся на все пространтсво виджета, но так как размеры лейблов фиксированны, получаем то что сейчас видем на скриншоте. Добавьте в лайаут снизу и справа по спейсеру.


Название: Re: Табличное расположение QLabel
Отправлено: zodiac от Ноябрь 22, 2008, 21:04
Если добавить еще qlabel и спейсеры, то второй будет наползать на первый. я так проверял уже. хочу через qpainter рисовать. получится?


Название: Re: Табличное расположение QLabel
Отправлено: pastor от Ноябрь 22, 2008, 21:19
Про наползание малехо не понял. Спейсеров нужно только 2: снижу и справа. Лично я бы с пайинтером бы незаморачивался, а заюзал бы QTableWidget.


Название: Re: Табличное расположение QLabel
Отправлено: zodiac от Ноябрь 22, 2008, 21:21
Ну да. два спейсера и два лейбла = наползание второго на первый.
А можно еще как-то изменить место, откуда начинать рисовать qlabel? Без qpainter...


Название: Re: Табличное расположение QLabel
Отправлено: lit-uriy от Ноябрь 22, 2008, 21:47
ничего никуда не наползает, пример прикреплен


Название: Re: Табличное расположение QLabel
Отправлено: zodiac от Ноябрь 22, 2008, 21:50
Дык мне надо динамически это рисовать. Меня интересует как можно их по координатам располагать. QLayout не дает юзать setGeometry


Название: Re: Табличное расположение QLabel
Отправлено: lit-uriy от Ноябрь 22, 2008, 22:32
QLayout не дает юзать setGeometry
И правильно делает, установи у виджета политику и, если необходимо, макимальный и минимальный размер.

П.С. теме место в "новичках"


Название: Re: Табличное расположение QLabel
Отправлено: zodiac от Ноябрь 22, 2008, 23:37
Сделал так:
Код:
	QGridLayout *layout = new QGridLayout(this);
QGridLayout *mainLayout = new QGridLayout();
QSpacerItem *horizontalSpacer = new QSpacerItem(geometry().width()-mainLayout->geometry().width(), 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
QSpacerItem *verticalSpacer = new QSpacerItem(20, geometry().height()-mainLayout->geometry().height(), QSizePolicy::Minimum, QSizePolicy::Expanding);

element *test1 = new element(this);
element *test2 = new element(this);
element *test3 = new element(this);
element *test4 = new element(this);

test1->setText("111");
test2->setText("222");
test3->setText("333");
test4->setText("444");

mainLayout->addWidget(test1, 0, 0, 1, 1);
mainLayout->addWidget(test2, 0, 1, 1, 1);
mainLayout->addWidget(test3, 0, 2, 1, 1);
mainLayout->addWidget(test4, 1, 2, 1, 1);

layout->addLayout(mainLayout, 0, 0);


layout->addItem(horizontalSpacer, 0, 1);
layout->addItem(verticalSpacer, 1, 0);