Название: Многооконное приложение и геометрия окон Отправлено: alik от Август 19, 2017, 19:24 Здравствуйте уважаемые форумчане!
Я совсем недавно начал писать программу на QT и стокнулся с пока еще не решаемыми для себя проблемами. Мой проект многокоонный. Он представляет собой смесь MDI и SDI. То есть открывается сначала основное окно MainWindow, занимая определенный кусок места на экране, далее ниже открывается другое дочернее окно, с такой же шириной, еще позже открывается третее второстепенное окно ниже второго и с такой же шириной. Все три окна прижаты к левому или правому краю экрана. 1) Проблема связана с тем, что когда создаются классы вторичных окна их геометрия не такая, как после отображения окон и поэтому я не могу точно выстроить окна один по другим по всей высоте экрана. 2) Можно ли выравнивать эти окна по типу Layout-ов ? Получается либо наложение окон друг на друга краями, либо разрыв между ними. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QRect screenGeometry = QApplication::desktop()->screenGeometry(); int MainWinWidth = 240; int MainWinHeight = 120; this->setWindowTitle("Main Window"); this->setFixedSize(MainWinWidth, MainWinHeight); this->move(screenGeometry.width() - this->width(), screenGeometry.top()); this->show(); QRect MainWinRect = this->geometry(); int VerWinHeight = 300; fVerSec = new VerticalSection(this); fVerSec->setWindowTitle(tr("Vertical Section")); fVerSec->resize(this->width(), VerWinHeight); fVerSec->move(this->geometry().left(), this->geometry().top() + this->height() - 1); fVerSec->show(); flist_vsf = new list_vsf(this); flist_vsf->setWindowTitle(tr("Scans")); flist_vsf->resize(this->width(), screenGeometry.height() - fVerSec->geometry().top() - fVerSec->height()); flist_vsf->move(this->geometry().left(), fVerSec->geometry().top() + fVerSec->geometry().height()); flist_vsf->show(); } Название: Re: Многооконное приложение и геометрия окон Отправлено: Bepec от Август 19, 2017, 20:12 Убрать рамки.
Вы их не учитываете, потому у вас всё и сбоит. А перемещать, изменять геометрию вам придётся самим. Название: Re: Многооконное приложение и геометрия око Отправлено: alik от Август 19, 2017, 20:24 Убрать рамки. А как называется соответствующая опция? Где ее искать?Вы их не учитываете, потому у вас всё и сбоит. А перемещать, изменять геометрию вам придётся самим. В редакторе форм на объектах типа QDialog не нахожу свойства frameShape ! Название: Re: Многооконное приложение и геометрия окон Отправлено: Bepec от Август 19, 2017, 20:55 А его нету в дизайнере. В дизайнере вообще дофига чего нету.
Зато есть Qt::FramelessWindowHint, в setFlags(). PS дизайнер тут скорее инструмент для грубой настройки - накидал, основные свойства задал, а более точная настройка только в коде :) Название: Re: Многооконное приложение и геометрия окон Отправлено: alik от Август 19, 2017, 22:24 А его нету в дизайнере. В дизайнере вообще дофига чего нету. Зато есть Qt::FramelessWindowHint, в setFlags(). PS дизайнер тут скорее инструмент для грубой настройки - накидал, основные свойства задал, а более точная настройка только в коде :) сделал так: fVerSec = new VerticalSection(this); fVerSec->setWindowTitle(tr("Vertical Section")); fVerSec->setWindowFlags(Qt::FramelessWindowHint); fVerSec->show(); flist_vsf = new list_vsf(this); flist_vsf->setWindowTitle(tr("Volume Scans List")); flist_vsf->setWindowFlags(Qt::FramelessWindowHint); flist_vsf->show(); В итоге оба дочерних окна не отрисовываются на экране !? Название: Re: Многооконное приложение и геометрия окон Отправлено: Bepec от Август 19, 2017, 22:53 Выложите минимальный работоспособный проект и я посмотрю.
И да, есть тег код - такая # в последней строчке. PS а код выкладывать архивом, желательно с про файлом :) Программисты ленивый народ :/ PPS если страшно за наработки, можете мне в личку послать :) Название: Re: Многооконное приложение и геометрия окон Отправлено: break от Август 20, 2017, 00:55 В флаги надо Qt::Window добавить скорее всего.
Название: Re: Многооконное приложение и геометрия окон Отправлено: alik от Август 20, 2017, 09:50 В флаги надо Qt::Window добавить скорее всего. Не помоглоНазвание: Re: Многооконное приложение и геометрия окон Отправлено: Bepec от Август 20, 2017, 17:19 Код: QRect MainWinRect = this->geometry(); После мучений с VM убунты, пары крашей фс и болтайки с bzlib2, всё же запустил :D PS заголовков лишаемся, зато получаем попиксельное управление окнами. Правда нужно будет ещё перенос организовать самим. Если такой вариант не устраивает, то милости просим в дебри убунты - получение текущих размеров рамок, заголовкой, и потом уже рассчитывать. Название: Re: Многооконное приложение и геометрия око Отправлено: alik от Август 20, 2017, 21:05 Код:
После мучений с VM убунты, пары крашей фс и болтайки с bzlib2, всё же запустил :D PS заголовков лишаемся, зато получаем попиксельное управление окнами. Правда нужно будет ещё перенос организовать самим. Если такой вариант не устраивает, то милости просим в дебри убунты - получение текущих размеров рамок, заголовкой, и потом уже рассчитывать. Спасибо большое! Это работает! После мытарств сделал с заголовками окон через таймеры: Код: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) Название: Re: Многооконное приложение и геометрия окон Отправлено: Bepec от Август 20, 2017, 21:07 Пользуйтесь уже тегом [ CODE ][ /code ], это кнопочка со значком "#".
Пользуйтесь на здоровье, только учтите что время загрузки на слабых системах может отличаться и вы получите ту же кашу, что и в начале. PS если уж нужны заголовки, то получайте их размер платформозависимыми функциями. Название: Re: Многооконное приложение и геометрия окон Отправлено: alik от Август 20, 2017, 21:20 Пользуйтесь уже тегом [ CODE ][ /code ], это кнопочка со значком "#". Научился пользоваться тегом ))Пользуйтесь на здоровье, только учтите что время загрузки на слабых системах может отличаться и вы получите ту же кашу, что и в начале. PS если уж нужны заголовки, то получайте их размер платформозависимыми функциями. Название: Re: Многооконное приложение и геометрия око Отправлено: alik от Август 20, 2017, 21:27 А можно еще вопрос?
Использую QVBoxLayout для создания палитры цветов с надписями. Не могу добиться, чтобы разрыв между объектами QLineEdit (цветами) был нулевым. Маргин ставлю 0. Код: void TMap::adjust_colorscale2() Название: Re: Многооконное приложение и геометрия око&# Отправлено: gil9red от Август 20, 2017, 22:00 А можно еще вопрос? Использую QVBoxLayout для создания палитры цветов с надписями. Не могу добиться, чтобы разрыв между объектами QLineEdit (цветами) был нулевым. Маргин ставлю 0. Цитировать setSpacing(0) Название: Re: Многооконное приложение и геометрия око&# Отправлено: alik от Август 21, 2017, 10:59 А можно еще вопрос? Использую QVBoxLayout для создания палитры цветов с надписями. Не могу добиться, чтобы разрыв между объектами QLineEdit (цветами) был нулевым. Маргин ставлю 0. Цитировать setSpacing(0) Я ставил это условие color_scales_Layout->setSpacing(0); Не помогло. Перешел от QLineEdit к QLabel и получилось разместить элементы впритык, как и хотел. Название: Re: Многооконное приложение и геометрия окон Отправлено: Bepec от Август 21, 2017, 14:20 Для объяснения проблемы на будущее - у LineEdit внутри контейнер, который использует 2 цвета палитры - для рамки и содержимого. А т.к. менялась только Base роль, рамка оставалась стандартного цвета.
Название: Re: Многооконное приложение и геометрия окон Отправлено: Авварон от Август 23, 2017, 18:03 Нафига убирать фрейм? http://doc.qt.io/qt-5/application-windows.html#window-geometry
|