У меня есть класс QLayout
, который принимает QLabel
и выравнивает его как Qt::AlignRight
в ячейке. Первоначально я думаю, что он работает (поскольку размер ячейки макета точно равен размеру растрового изображения), у меня есть событие, связанное с QLabel
, т.е. когда произошло mousepressEvent
размер QLabel
увеличивается (размер ячейки также увеличивается, поэтому размер всего столбца увеличивается). В это время другие QLabel
в QLayout
выравниваются по левому краю, я хочу, чтобы они были выровнены по правому краю или по центру вместо выравнивания по левому краю,
Мой код,
Container::Container()
{
Layout = new QGridLayout;
Layout->setHorizontalSpacing(0);
Layout->setVerticalSpacing(10);
Layout->setMargin(10);
for(int i = 0; i < 4; ++i)
{
holes[i] = new Hole;
Layout->addWidget(ui_holes[i], i, 0, 1, Qt::AlignRight);
ui_holes[i].setPixmap("mypixmapname.png")
}
Layout->setAlignment(Qt::AlignCenter);
setLayout(Layout);
setMaximumSize(200,760);
setMinimumSize(200,760);
setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed);
}
void Screen::mousePressEvent(QMouseEvent *tevent)
{
if(childAt(tevent->pos()))
{
if(childAt(tevent->pos())->objectName() == "Hole")
{
hole = static_cast<Hole *>(childAt(tevent->pos()));
hole->resize(QSize(160,160));
}
}
}
void Screen::mouseReleaseEvent(QMouseEvent*)
{
if(hole)
{
ui_Hole->resetSize();
}
}
Hole — это класс, унаследованный от QLabel, и я создал две новые функции-члена для Hole: resetSize и resize,
void Hole::resize(QSize size)
{
setSize(size);
if(!ui_HoleFlags[PIXMAP_EXISTS])
return void(0);
QPixmap *tempPixmap = ui_resourceIcon();
setPixmap(tempPixmap->scaled(size,Qt::IgnoreAspectRatio));
delete tempPixmap;
}
QPixmap* Hole::ui_resourceIcon()
{
if(!ui_HoleFlags[ICON_EXISTS])
return NULL;
QPixmap *tempPixmap = new QPixmap(*pixmap());
return tempPixmap;
}
void Hole::setSize(QSize size)
{
setMaximumSize(size);
setMinimumSize(size);
}
void Hole::resetSize()
{
if(ui_HoleFlags[PIXMAP_EXISTS])
setPixmap(*Pixmap);
setSize(ICON_SIZE);
}
заранее спасибо