Я хочу создать приложение, которое включает в себя четыре виджета, которые изменяются по размеру с помощью QSplitter. В этом приложении я бы хотел, чтобы все четыре виджета изменялись при изменении размера разделителя. Я понял это, имея горизонтальный сплиттер, содержащий два вертикальных разветвителя. Таким образом, вертикальное разделение касается только двух виджетах и не всех четырех. Есть ли способ расщепления этой «матрицы»?QSplitter в двух направлениях
0
A
ответ
2
Вы пробовали подключить сигнал splitterMoved(int,int)
одного к разъему moveSplitter(int,int)
другого?
QObject::connect(ui->upperSplitter, SIGNAL(splitterMoved(int,int), ui->lowerSplitter, SLOT(moveSplitter(int,int));
QObject::connect(ui->lowerSplitter, SIGNAL(splitterMoved(int,int), ui->upperSplitter, SLOT(moveSplitter(int,int));
http://doc.qt.io/qt-5/qsplitter.html#splitterMoved
http://doc.qt.io/qt-5/qsplitter.html#moveSplitter
Или вы, возможно, придется смотреть на класс QSplitterHandle.
http://doc.qt.io/qt-5/qsplitterhandle.html
Надежда, что помогает.
1
Другая возможность для другого ответа - это макет макета с причудливой ручкой изменения размера в пересечении четырех виджетов.
Необходимо выполнить пару строк кода, используя события мыши и вызовы setGeometry.
Как это (рабочий пример):
(просто добавить событие рисования, чтобы нарисовать ручку в центре, как вам нравится)
Черт .. очевидно, была ошибка copy'n'paste с ярлыками кнопок;) Я скорректированный фиксированный код ...
FourWaySplitter::FourWaySplitter(QWidget *parent) :
QWidget(parent),
ui(new Ui::FourWaySplitter), m_margin(5)
{
ui->setupUi(this);
m_ul = new QPushButton("Upper Left", this);
m_ur = new QPushButton("Upper Right", this);
m_ll = new QPushButton("Lower Left", this);
m_lr = new QPushButton("Lower Right", this);
setFixedWidth(500);
setFixedHeight(400);
// of course, the following needs to be updated in a sensible manner
// when 'this' is not of fixed size in the 'resizeEvent(QResizeEvent*)' handler
m_handleCenter = rect().center();
m_ul->setGeometry(QRect(QPoint(m_margin,m_margin), m_handleCenter - QPoint(m_margin, m_margin)));
m_ur->setGeometry(QRect(QPoint(width()/2 + m_margin, m_margin), QPoint(width() - m_margin, height()/2 - m_margin)));
m_ll->setGeometry(QRect(QPoint(m_margin, height()/2 + m_margin), QPoint(width()/2 - m_margin, height() - m_margin)));
m_lr->setGeometry(QRect(QPoint(width()/2 + m_margin, height()/2 + m_margin), QPoint(width() - m_margin, height() - m_margin)));
}
void FourWaySplitter::mouseMoveEvent(QMouseEvent * e)
{
if(m_mouseMove) {
QRect newGeo = m_ul->geometry();
newGeo.setBottomRight(e->pos() + QPoint(-m_margin, -m_margin));
m_ul->setGeometry(newGeo);
newGeo = m_ur->geometry();
newGeo.setBottomLeft(e->pos() + QPoint(+m_margin, -m_margin));
m_ur->setGeometry(newGeo);
newGeo = m_ll->geometry();
newGeo.setTopRight(e->pos() + QPoint(-m_margin, + m_margin));
m_ll->setGeometry(newGeo);
newGeo = m_lr->geometry();
newGeo.setTopLeft(e->pos() + QPoint(+m_margin, + m_margin));
m_lr->setGeometry(newGeo);
}
}
void FourWaySplitter::mousePressEvent(QMouseEvent * e)
{
if((e->pos() - m_handleCenter).manhattanLength() < 10) {
m_mouseMove = true;
}
}
void FourWaySplitter::mouseReleaseEvent(QMouseEvent * e)
{
m_handleCenter = rect().center();
m_mouseMove = false;
}
FourWaySplitter::~FourWaySplitter()
{
delete ui;
}
Смежные вопросы
- 1. зацикливания в двух направлениях
- 2. Слияние двух списков в двух направлениях
- 3. Скомпилированная привязка в двух направлениях
- 4. QSplitter handle bar
- 5. Запрос CTE SQL рекурсивно в двух направлениях
- 6. Нужна помощь: DataGridCheckBoxColumn работает в двух направлениях
- 7. Создание складного списка в двух направлениях?
- 8. Генератор случайных чисел в двух направлениях
- 9. Как реализовать свойства объекта в двух направлениях
- 10. Как использовать SQLAlchemy association_proxy в двух направлениях?
- 11. Переключить меню в двух разных направлениях
- 12. SQL сервер - траверс дерева в двух направлениях
- 13. Фиксированная ширина виджета в QSplitter
- 14. QScrollArea с QWidget в QSplitter
- 15. PyQt QSplitter setSizes использования
- 16. Как переместить QSplitter?
- 17. Qt: QSplitter, redo размеры
- 18. Удалить виджет из QSplitter
- 19. Объединение двух ветвей в обоих направлениях в ртутных
- 20. Итерация над deque в двух направлениях эффективно в Python
- 21. wpf checkbox в bindview list в двух направлениях
- 22. Создание двух точек серии в противоположных направлениях в Highcharts
- 23. Проецирование в двух направлениях считается реляционным в core.logic?
- 24. Как добиться привязки данных в двух направлениях в родной GWT?
- 25. jQuery: анимация двух изображений с одной функцией в разных направлениях
- 26. Объекты связывают коллекцию объекта с DataGrid в двух направлениях
- 27. Java-рекурсия по двум параметрам и в двух направлениях
- 28. Родительский $ scope в двух направлениях, обязательная директива не корректно обновляется
- 29. Javascript: Можно ли передавать данные в двух направлениях через iframe?
- 30. как повернуть изображение в двух направлениях с двумя разными углами?
Надеюсь, что это не вызывает круговую сигнализации .. но хорошая идея. – Aaron