Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: swbor от Февраль 26, 2017, 10:12



Название: QGridLayout координаты и рисование
Отправлено: swbor от Февраль 26, 2017, 10:12
Добрый день!
Стоит задача все содержимое QGridLayout обвести в кружочек. Рисовать на самой форме умею. Но совершенно не могу понять как узнать координаты QGridLayout. Функция Geometry у Layout выдает нули по x и по y. Если пробую GridLayout->widget()->pos() вылезает ошибка SIGSEGV.
Помогите решить эту задачу.
Либо объясните как создать унаследоваться от QGridLayout так чтобы переопределить ее функцию рисования(тоже пробовал, не получилось)


Название: Re: QGridLayout координаты и рисование
Отправлено: kambala от Февраль 26, 2017, 11:52
можно взять координаты виджета в левой верхней и в правой нижней ячейке — соответствующие углы и будут координатами лэйаута


Название: Re: QGridLayout координаты и рисование
Отправлено: __Heaven__ от Февраль 26, 2017, 12:36
можно взять координаты виджета в левой верхней и в правой нижней ячейке — соответствующие углы и будут координатами лэйаута

там ещё отступы от границ и пробелы необходимо учесть, если таковые имеются


Название: Re: QGridLayout координаты и рисование
Отправлено: GreatSnake от Февраль 26, 2017, 13:38
Код
C++ (Qt)
QRect QWidget::childrenRect() const


Название: Re: QGridLayout координаты и рисование
Отправлено: swbor от Февраль 26, 2017, 15:18
можно взять координаты виджета в левой верхней и в правой нижней ячейке — соответствующие углы и будут координатами лэйаута
Пробовал GridLayout->itemAt(0)->geometry()->x() выдает ноль., хотя располагается это все посередине формы.
Код
C++ (Qt)
QRect QWidget::childrenRect() const
А где это применить? В QGridLayout нет такого.

Сорри если сильно туплю, но пока вообще не понятно как решить такую свиду тривиальную задачу. Очень буду рад подсказке в виде конкретного кода.


Название: Re: QGridLayout координаты и рисование
Отправлено: Zerkin от Февраль 27, 2017, 13:10
Код
C++ (Qt)
class TestQt : public QWidget
{
Q_OBJECT
 
public:
TestQt(QWidget *parent = 0);
~TestQt();
};
 
TestQt::TestQt(QWidget *parent)
: QWidget(parent)
{
QGridLayout* layout = new QGridLayout(this);
QPushButton* button1 = new QPushButton("1", this);
QPushButton* button2= new QPushButton("2", this);
QPushButton* button3 = new QPushButton("3", this);
QPushButton* button4 = new QPushButton("4", this);
layout->addWidget(button1, 0, 0);
layout->addWidget(button2, 0, 1);
layout->addWidget(button3, 1, 0);
layout->addWidget(button4, 1, 1);
 
const QRect rect = childrenRect();
 
qDebug() << rect;
}
 
TestQt::~TestQt()
{
 
}
 

В выводе получаем QRect(0,0 100x30). Вполне определенные координаты и размеры.