Просмотр сообщений
|
Страниц: 1 ... 12 13 [14] 15 16 ... 19
|
196
|
Qt / Вопросы новичков / Re: Виджет-карта и легенда
|
: Февраль 23, 2014, 09:31
|
Igors, Спасибо за ответ. Т.е. сделать "легенду" полноценным окном (Qt::Window) не получится (да и не надо). Делаем ее QFrame, располагаем на ней чего надо, в том числе самодельную кнопочку "Close". Как сделать перемещение? Drag-Drop-техникой, да? Я просто ей еще не пользовался, но тем интереснее будет попробовать. Изменение размеров - это в общем-то от лукавого - обойдусь.
|
|
|
197
|
Qt / Вопросы новичков / Виджет-карта и легенда
|
: Февраль 22, 2014, 19:49
|
Добрый день! Всех мужчин с наступающим! Есть виджет(назовем его Картой) (в самом деле MDI-субокно). На нем картинка. Хотелось бы создать дополнительный виджет - "легенду", на котором бы пояснялось, что происходит на Карте. Требования к виджету-легенде 1. Его можно двигать в пределах виджета-Карты и изменять его размер(т.е. у него есть заголовок и рамка) и закрывать 2. При перекрытии другой Картой, он должен тоже перекрываться 3. При движении Карты Легенда должна перемещаться вместе с ним. Т.е. надо, чтоб Легенда была относительно самостоятельна, Но Карта была ее контейнером. И вот никак не получается удовлетворить всем трем требованиям Вот так я его создаю Leg = new QWidget(this, Qt::Window); // (а) // Попытка дать флаг Qt::SubWindow тоже ничего не дала или Leg = new QWidget(this); // (б) Leg->setParent(this); // Это кажется, вообще ни на что не влияет // this - это Карта В случае (а) выполняется требование 1 (однако вылезает за пределы), но не выполняются 2 и 3 В случае (б) выполняются требование 2 и 3, но не выполняется 1 Есть ли выход? Или я вообще на тупиковом пути?
|
|
|
199
|
Qt / Вопросы новичков / Re: Еще раз про MDI
|
: Февраль 10, 2014, 19:05
|
Похоже, склоняюсь к тому, чтоб вообще от MDI отказаться. Его механизмы смутны, и мне мало что дают. tile и cascade как-нибудь сам реализую. Есть MainWindow, центральный виджет, все окошки - его детки... Завтра с утра и займусь...
|
|
|
200
|
Qt / Вопросы новичков / Еще раз про MDI
|
: Февраль 10, 2014, 13:20
|
Хочется, чтобы при максимизации субокна, у него оставался его title, чтоб его можно было "возить" по всему area (с появлением скроллов, разумеется), и чтобы другие окна сохраняли свою геометрию. Вот, придумал такой костыль. Вроде, работает. dsub.h: class DSub : public QWidget { Q_OBJECT public: QMdiSubWindow *su; public: DSub(); public slots: void States(Qt::WindowStates, Qt::WindowStates); }; dsub.c: DSub::DSub() : QWidget() // QGLWidget() { .... su = par->area->addSubWindow(this); QObject::connect(su, SIGNAL(windowStateChanged(Qt::WindowStates, Qt::WindowStates)), this, SLOT(States(Qt::WindowStates, Qt::WindowStates))); } //---------------- void DSub::States(Qt::WindowStates old, Qt::WindowStates ne) { if (ne & Qt::WindowMaximized) { su->setWindowState(old); su->move(0, 0); su->resize(mw->area->width(), mw->area->height()); } } А нельзя ли этого добиться как-то более цивилизовано... mw - это MainWindow
|
|
|
201
|
Qt / Вопросы новичков / Re: Странности MDI
|
: Февраль 10, 2014, 09:07
|
Может эти флаги не совместимы с Субокнами? Видимо, так. Уже не помню, зачем я их поставил. Тем более, что в субокнах и без этих флагов все нужные кнопочки есть. Кажется, это было, когда я еще пытался без MDI этими окнами управлять. Но любопытно, что программа вылетала без единого звука. Одно утешает. Может быть потерянный мной день кому-то поможет в аналогичной ситуации...
|
|
|
204
|
Qt / Вопросы новичков / Re: Странности MDI
|
: Февраль 09, 2014, 13:35
|
Прошу прощения. Лишняя палка попала при переписывании. В самом деле там одна. Проверил. Раскомментировал. Палка - одна (побитовая). Глюки возобновились.
|
|
|
206
|
Qt / Вопросы новичков / Странности MDI
|
: Февраль 08, 2014, 20:46
|
Весьма любопытно вел себя MDI. Несколько окон замечательно создавалось. Но стоило одно из них расширить на всю область (кнопочкой "экран") как при создании следующего окна программа молча вылетала. Просто кончалась безо всяких сообщений А иногда и через одно-два создание, честно, логики ее поведения я так и не смог уловить. Вот так я создавал окно. DSub::DSub(DMain *par) : QWidget() // par - это отцовское окно, унаследованнное от QMainWindow // area - QMdiArea, сделанная центральным иджетом { su = par->area->addSubWindow(this); //su->setWindowFlags(windowFlags() // || Qt::WindowTitleHint | Qt::WindowSystemMenuHint); // Вот из-за этого программа молча слетала Стоило убрать то, что закомментировано, и все прекрасно заработало А это кусок h-файла class DSub : public QWidget { Q_OBJECT public: QMdiSubWindow *su; В общем-то в данный момент это не так и важно. Работает - и слава Богу. Но интересно, в чем же дело, чтоб на грабли эти больше не наступать...
|
|
|
|
|