Название: указать родителя побочным окнам[РЕШЕНО] Отправлено: Zeka13 от Март 20, 2012, 20:13 Доброго времени суток
Создаю из главного окна - побочные и хочу, чтобы они жили, только если живёт главное окно + центрировались относительно него и получали фокус после отрисовки. Прочитал, что нужно побочные окна наследовать от главного окна(или кнопки), но сам до конца разобраться не смог. Прикрепляю маленький демонстрационный проект, заранее спасибо. Название: Re: указать родителя побочным окнам Отправлено: kambala от Март 20, 2012, 20:22 родитель указывается в конструкторе в параметре parent (обычно туда передается this). побочные окна наследовать от главного окна не нужно.
проект ты, кстати, не прикрепил :) Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 20, 2012, 20:39 совсем забыл :), сейчас опробую ваш совет
проект выложил Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 20, 2012, 20:44 чего-то не сообразить :-[
Код
P.S. как на форуме делать красивую подсветку синтаксиса? Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 20, 2012, 20:48 Код
z уничтожится при выходе из функции Название: Re: указать родителя побочным окнам Отправлено: kambala от Март 20, 2012, 20:49 Код подсветка - допиши "=cpp" без кавычек в открытие тега code (или просто посмотри через цитату как я у меня тут написано) Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 20, 2012, 20:52 Код подсветка - допиши "=cpp" без кавычек в открытие тега code (или просто посмотри через цитату как я у меня тут написано) Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 20, 2012, 20:53 я не очень понял что куда дописать =)
извините, я ещё совсем зелёный Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 20, 2012, 20:53 в редакторе сообщения есть выпадающий список с выбором языка, который подсвечивать
Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 20, 2012, 20:59 спасибо
блин, а с главным вопросом то чего? Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 20, 2012, 21:00 в редакторе сообщения есть выпадающий список с выбором языка, который подсвечивать Спасибо, действительно если в нем выбрать язык то автоматом и тег и параметр пропишет. Меня сбило с толку то, что первый выбранный параметр "C++ (Qt)", а надо нажимать 14-й "C++ (Qt)" =). Хотя все же лучше было бы если-б и по кнопке выбирался "C++ (Qt)" ибо форум как-бы ему посвящен. А то лишний клик каждый раз делать.Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 20, 2012, 21:06 видимо зря я сразу два вопроса спросил ...
Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 20, 2012, 21:07 спасибо блин, а с главным вопросом то чего? тебе же kambala ответил первым сообщением Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 20, 2012, 21:09 я и говорю, что с его ответом разобраться не смог!
Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 20, 2012, 21:11 я и говорю, что с его ответом разобраться не смог! И предлагаешь нам прочитать твои мысли и самим понять что ты не понял?Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 20, 2012, 21:15 я ничего не понял почти =)
а можно пожалуйста на примере показать, который я скинул? Реально быстрее же получится и конструктивнее Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 20, 2012, 21:20 я и говорю, что с его ответом разобраться не смог! И предлагаешь нам прочитать твои мысли и самим понять что ты не понял?Добавляем в главное окно: Код Реализация: Код Не очень хорошо, но думаю пойдет. А второй вопрос я просто не понял. Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 20, 2012, 21:26 Если окну указать родителя другое окно то оно тупо не отображается. Даже не знаю почему. И если никто не ответит, то вот костыль: А где создается второе окно? чтобы окно отобразилось, надо ему или его родителю вызвать show() Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 20, 2012, 21:30 Если окну указать родителя другое окно то оно тупо не отображается. Даже не знаю почему. И если никто не ответит, то вот костыль: А где создается второе окно? чтобы окно отобразилось, надо ему или его родителю вызвать show() Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 20, 2012, 21:32 Если окну указать родителя другое окно то оно тупо не отображается. Даже не знаю почему. И если никто не ответит, то вот костыль: А где создается второе окно? чтобы окно отобразилось, надо ему или его родителю вызвать show() Видимо потому, что если виджету указать родителя, то он не будет отдельным окном, а будет виджетом на этом родителе Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 20, 2012, 21:35 Zeka13: видимо тебе придется самому центрировать эти окна и уничтожать их, когда закрывается главное окно. Последний пункт (про фокус) я не понял
Название: Re: указать родителя побочным окнам Отправлено: kambala от Март 20, 2012, 21:57 спасибо блин, а с главным вопросом то чего? Код
Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 20, 2012, 22:06 спасибо блин, а с главным вопросом то чего? Код
Разве при указании парента виджет откроется как отдельное окно? Название: Re: указать родителя побочным окнам Отправлено: kambala от Март 20, 2012, 22:27 если он наследник QWidget, то нет, если же QDialog, то да
Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 10:05 так а если от кнопки наследовать?
Я же не спросил, как указать родителем "окно", а как расположить новое окно относительно главного и передать на него фокус + чтобы оно жило, только если главное живёт, так же точно можно без костылей! Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 10:13 так а если от кнопки наследовать? Если нужен именно QWidget то делай как я выше написал, если QWidget не обязателен и хочешь "правильно" то наследуй Form от QDialog, и при создании укажи родителя:Я же не спросил, как указать родителем "окно", а как расположить новое окно относительно главного и передать на него фокус + чтобы оно жило, только если главное живёт, так же точно можно без костылей! Код: Form *bufka = new Form(this); Так вот вопрос: что не так? Название: Re: указать родителя побочным окнам Отправлено: Bepec от Март 21, 2012, 10:18 to V1KT0P:
Что бы окно с родителем отобразилось отдельным окошком, необходимо просто ему в контрукторе прописать Код: setWindowsFlag(Qt::Window); Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 10:22 to V1KT0P: Оу, спасибо. Пошел патчить свою прогу... =)Что бы окно с родителем отобразилось отдельным окошком, необходимо просто ему в контрукторе прописать Код: setWindowsFlag(Qt::Window); добавлено: to Bepec А как сделать чтоб отдельная кнопка на панели задач оставалась? Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 11:18 Цитировать а можно пожалуйста на примере показать, который я скинул? Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 11:21 Цитировать а можно пожалуйста на примере показать, который я скинул? Код И строку: Код Меняешь на: Код
Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 11:27 огромное спасибо, опишите пожалуйста теперь, как называются данные манипуляции?
Два из трёх вопроса решены, как теперь ориентировать новое окно, относительно главного? Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 11:37 огромное спасибо, опишите пожалуйста теперь, как называются данные манипуляции? Что за манипуляции?Два из трёх вопроса решены, как теперь ориентировать новое окно, относительно главного? Перед показом окна, вот этот код всегда отображает новое окно ниже главного: Код Если надо чтоб окна перемещались вместе с главным, то в главном окне делай сигнал который вызывается при изменении размера или положения окна. В Form добавляй слот который изменяет положение относительно новых координат. Связывай сигнал с слотом и все. Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 11:56 что изменилось(описательно) после замены моего кода на
Код
Что делает Код ? И какую роль играет тут слово Window? про move сейчас попробую сам разобраться :) Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 21, 2012, 12:00 Что делает Код ? И какую роль играет тут слово Window? про move сейчас попробую сам разобраться :) А документацию сейчас уже не модно читать? Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 12:02 Этой строкой мы назначаем новому окну родителя?
Название: Re: указать родителя побочным окнам Отправлено: Bepec от Март 21, 2012, 12:04 Зекаа открывай ассистант
Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 12:06 я нахожу google удобнее в разы
Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 12:10 я нахожу google удобнее в разы O_O Assistant дает мгновенные ответы на 95% возникающих вопросов.Вот я например про move не знал перед тем как писать пост, я открыл Assistant и глянул какие там у него функции для работы с положением есть. Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 12:22 а я вот совсем не понимаю как им пользоваться
Название: Re: указать родителя побочным окнам Отправлено: Bepec от Март 21, 2012, 12:22 Zeka13 - открываешь. Пишешь название класса. Читаешь. Не тупишь на форуме по 95% вопросов.
PS учи английский хотя бы технический (ну или переводчик :)) Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 12:26 в поиске по Assistant совпадению слишком много совпадений по move и MainWindow, искать как я-пальцем в небо
С английским проблем нет, есть проблемы с Assistant Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 12:35 в поиске по Assistant совпадению слишком много совпадений по move и MainWindow, искать как я-пальцем в небо Вот примерно так надо искать:С английским проблем нет, есть проблемы с Assistant 1) Хотим найти как изменить положение класса унаследованного от QWidget. 2) Открываем Assistant и вводим QWidget. Двойным кликом выбираем строку "QWidget". 3) В списке Public Functions ищем void функции которые принимают только координаты. 4) Находим только одну подходящую "void move ( int x, int y )", кликаем на нее и читаем: Код: This property holds the position of the widget within its parent widget. Разве Это было сложно? Название: Re: указать родителя побочным окнам Отправлено: Bepec от Март 21, 2012, 12:52 Zeka13 - открываешь. Пишешь название класса. Читаешь. Ищешь необходимое тебе слово(функцию) - move/remove/add/exit/close. Читаешь. Не тупишь на форуме по 95% вопросов.
Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 12:53 спасибо, буду привыкать к ассистант, сейчас буду разбираться сам с остальными манипуляциями
Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 12:54 и всё таки, что описательно делает
Код ? Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 21, 2012, 12:55 и всё таки, что описательно делает Код ? Передает в конструктор класса Values this параметром Название: Re: указать родителя побочным окнам Отправлено: Bepec от Март 21, 2012, 12:58 Код: Values *bufka Далее: Код: Values *bufka = new Values(this); Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 12:59 это то понятно, я же не совсем дауном решил что-то типо: открою ко я Qt Creator и буду просить на форумах писать за меня код =)
Я правда пытаюсь разобраться и c++ более или менее знаю. Просто передавая параметр this, который является в данном случае указателем на MainWindow, что именно происходит? Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 13:00 и всё таки, что описательно делает Если Values наследуется от QObject или от другого класса который тоже наследуется от него, то если в конструктор передать указатель на класс который либо является QObject либо наследуется от него, то он становится "ребенком" родителя. То что передается называется родителем. Это нужно для того чтобы после удаления родителя он сам удалил всех "детей" которые ему принадлежат. То-есть не нужно вручную удалять. Где-то даже статья про это была но я уже не помню.Код ? Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 13:04 спасибо большое, это именно то, что я хотел услышать!
И наконец про Qt::WindowFlags. Эта функция кидает наше окно в 0,0 а мы потом двигаем это окно туда, куда нам нужно? Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 13:07 спасибо большое, это именно то, что я хотел услышать! Если ты про:И наконец про Qt::WindowFlags. Эта функция кидает наше окно в 0,0 а мы потом двигаем это окно туда, куда нам нужно? Код То setWindowFlags - это функция которая устанавливает флаги. Qt::Window - флаг небходимый для того чтоб виджет считался отдельным окном когда ему назначат родителя, иначе он добавится к родителю. Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 13:09 я сейчас убрал эту функцию и ничего не изменилось, так что так и не понимаю, зачем это нужно
Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 13:12 я сейчас убрал эту функцию и ничего не изменилось, так что так и не понимаю, зачем это нужно Если ты ее убрал из конструктора виджета окна и при создании указал родителя окну то отдельное окно не появится, виджет просто добавится к родителю.Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 13:20 Цитировать виджет просто добавится к родителю не очень понимаюЦитировать отдельное окно не появится В каком смысле? У меня всё появилосьНазвание: Re: указать родителя побочным окнам Отправлено: mutineer от Март 21, 2012, 13:21 Цитировать виджет просто добавится к родителю не очень понимаюЦитировать отдельное окно не появится В каком смысле? У меня всё появилосьпокажи куски кода где ты создаешь окно и где выставлял setWindowFlags Название: Re: указать родителя побочным окнам Отправлено: Bepec от Март 21, 2012, 13:22 Зека. Ты про родителя слышал? Ну не тормозиии....
Если виджету задан родитель, то виджет будет отображаться НА родителе. Если виджету НЕ задан родитель, или присутствует setWindowFlags(Qt::Window), тогда он становится отдельным окном. PS хочешь нормальных ответов? Задавай нормальные вопросы, учись ;) Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 13:26 что значит
Цитировать отображаться НА родителе ?и чем отличается тогда "задать родителя" от присутствия setWindowFlags(Qt::Window)? mutineer, секунду Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 13:28 сейчас попробовал в минимальном проекте без setWindowFlags(Qt::Window); и окна не появилось, сейчас разберусь с главным проектом
Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 21, 2012, 13:30 что значит Цитировать отображаться НА родителе ?и чем отличается тогда "задать родителя" от присутствия setWindowFlags(Qt::Window)? http://doc.crossplatform.ru/qt/4.7.x/html-qt/objecttrees.html Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 13:42 а там точно есть ответ на мой вопрос, а то я прочёл уже 2 раза, не нашёл на него ответа?
Вот пробный проект, окно(Qdialog) создаётся без функции Код
Название: Re: указать родителя побочным окнам Отправлено: mutineer от Март 21, 2012, 13:46 а там точно есть ответ на мой вопрос, а то я прочёл уже 2 раза, не нашёл на него ответа? Вот пробный проект, окно(Qdialog) создаётся без функции Код
Там точно есть ответ на вопрос зачем задавать родителя объектам Вверху тебе писали, что если твое окно наследуется от QDialog, то оно в любом случае покажется как отдельное окно. читай внимательнее если он наследник QWidget, то нет, если же QDialog, то да Название: Re: указать родителя побочным окнам Отправлено: Bepec от Март 21, 2012, 13:51 Ппц... пишешь ему пишешь, а он видимо каждое слово то ли гуглит, то ли трансформирует...
Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 14:38 Извиняюсь, если был невнимательным
Но всё же, чем отличается тогда "задать родителя" от присутствия setWindowFlags(Qt::Window)? Название: Re: указать родителя побочным окнам Отправлено: V1KT0P от Март 21, 2012, 15:07 Извиняюсь, если был невнимательным Вот специально для тебя исчерпывающая таблица:Но всё же, чем отличается тогда "задать родителя" от присутствия setWindowFlags(Qt::Window)?
Название: Re: указать родителя побочным окнам Отправлено: Zeka13 от Март 21, 2012, 15:22 так понятно конечно, а где вы такую табличку взяли?
всем кто помог- спасибо огромное! Название: Re: указать родителя побочным окнам[РЕШЕНО] Отправлено: Bepec от Март 21, 2012, 15:25 Он её создатель... Но чтобы объяснить такую элементарную вещь, делать табличку... У вас будут проблемы с дальнейшим освоением, если головой думать не будете.
Название: Re: указать родителя побочным окнам[РЕШЕНО] Отправлено: Igors от Март 21, 2012, 15:32 Он её создатель... Но чтобы объяснить такую элементарную вещь, делать табличку... У вас будут проблемы с дальнейшим освоением, если головой думать не будете. А зачем если есть объясняющие? :) Человек кстати абсолютно корректен - спросил вопрос, получил ответ, спросил еще вопрос.. А Вам хотелось быть большим, белым и пушистым который все знает - ну получайте :)Название: Re: указать родителя побочным окнам[РЕШЕНО] Отправлено: Bepec от Март 21, 2012, 15:46 Я белый и пушистый :) А когда заканают, то синий и гадкий ;)
Такие простые вещи ещё можно объяснить. Но дальше табличку уже никто не сделает. PS к тому же я, имея рядом специалиста, с которым могу обсудить проблему, понимаю как иногда тяжко одному ворочать камуфки программирования. Название: Re: указать родителя побочным окнам[РЕШЕНО] Отправлено: Zeka13 от Март 21, 2012, 18:25 я не видел никакого объяснения, кроме таблицы, может программирование это и правда не моё, но мне нравится и я пытаюсь разобраться
Название: Re: указать родителя побочным окнам[РЕШЕНО] Отправлено: Zeka13 от Март 21, 2012, 18:40 вот табличка
https://docs.google.com/document/d/1BbRd1Ekwwosn-UyyjFEpqsDwoQl6iCSw3RJq2oh00e0/edit (https://docs.google.com/document/d/1BbRd1Ekwwosn-UyyjFEpqsDwoQl6iCSw3RJq2oh00e0/edit) Название: Re: указать родителя побочным окнам[РЕШЕНО] Отправлено: V1KT0P от Март 21, 2012, 18:52 вот табличка Я все же советую тебе перечитать топик, ссылки что тебе дали. И разобраться почему в каждом конкретном случае: отобрахится/неотобразится, автозакроется/неавтозакроется. Если ты этого не поймешь то ничего хорошего потом врятли сможешь сделать.https://docs.google.com/document/d/1BbRd1Ekwwosn-UyyjFEpqsDwoQl6iCSw3RJq2oh00e0/edit (https://docs.google.com/document/d/1BbRd1Ekwwosn-UyyjFEpqsDwoQl6iCSw3RJq2oh00e0/edit) Название: Re: указать родителя побочным окнам[РЕШЕНО] Отправлено: Zeka13 от Март 21, 2012, 21:04 спасибо ещё раз!
|