Russian Qt Forum

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



Название: как сделать окно активным при открытии?
Отправлено: nvek от Февраль 02, 2017, 12:36
когда я делаю
Код:
aboutForm* tb = new aboutForm;
tb->setWindowModality(Qt::ApplicationModal);
tb->show();
у меня форма открывается, но она не активная (серая)
нехорошо


Название: Re: как сделать окно активным при открытии?
Отправлено: gil9red от Февраль 02, 2017, 12:38
setFocus() ?


Название: Re: как сделать окно активным при открытии?
Отправлено: Racheengel от Февраль 02, 2017, 12:59
raise()


Название: Re: как сделать окно активным при открытии?
Отправлено: Day от Февраль 02, 2017, 16:21
activateWindow()


Название: Re: как сделать окно активным при открытии?
Отправлено: nvek от Февраль 03, 2017, 07:26
не, не работает
Код:
aboutForm::aboutForm(QWidget *parent)
: QDialog(parent)
{
raise();
activateWindow();
        setWindowTitle(MAIN_WIN_TITLE);


Название: Re: как сделать окно активным при открытии?
Отправлено: Bepec от Февраль 03, 2017, 08:55
Пока оно не выйдет из конструктора, ни одно из предложенных тут решений не сработает :D
Так что костыльный но рабочий вариант - QTimer::SingleShot(500, this, SLOT(activateWindow())).

Точнее пока не завершится конструктор окна как такового вообще нет. Оно даже размеров своих не знает. А вот после сработки конструктора - активируйте за милую душу :)


Название: Re: как сделать окно активным при открытии?
Отправлено: Пантер от Февраль 03, 2017, 09:23
Пока оно не выйдет из конструктора, ни одно из предложенных тут решений не сработает :D
Так что костыльный но рабочий вариант - QTimer::SingleShot(500, this, SLOT(activateWindow())).

Точнее пока не завершится конструктор окна как такового вообще нет. Оно даже размеров своих не знает. А вот после сработки конструктора - активируйте за милую душу :)
А можно событие показа перехватить и в нем активироваться.


Название: Re: как сделать окно активным при открытии?
Отправлено: Day от Февраль 03, 2017, 09:35
Только вот непонятно, зачем в конструкторе activateWindow делать. Почему нельзя до или после show, например?


Название: Re: как сделать окно активным при открытии?
Отправлено: nvek от Февраль 03, 2017, 09:40
Код:
aboutForm::aboutForm(QWidget *parent)
: QDialog(parent)
{
        QTimer::singleShot(500, this, SLOT(activateWindow()));
if (false)
{
raise();
activateWindow();
}
так? но чет когда я жмякаю ф1 кнопка на форме не загорается, и надо на форму тыкнуть чтобы активировать форму. вот как то так
vs15 pro + Qt5


Название: Re: как сделать окно активным при открытии?
Отправлено: Пантер от Февраль 03, 2017, 09:58
Неправильный подход. Положением и активностью должно не окно управлять, а тот, кто это окно вызывает. Покажи код вызова окна.


Название: Re: как сделать окно активным при открытии?
Отправлено: nvek от Февраль 03, 2017, 10:03
он в первом посте
Код:
aboutForm* tb = new aboutForm;
tb->setWindowModality(Qt::ApplicationModal);
tb->show();


Название: Re: как сделать окно активным при открытии?
Отправлено: Пантер от Февраль 03, 2017, 10:36
tb->exec() сделай.


Название: Re: как сделать окно активным при открытии?
Отправлено: nvek от Февраль 03, 2017, 10:44
баг какойто  ???
я жмякаю ф1: окно вылезло(окно не активное)
если жмякать много много раз, оно открывается сколько угодно раз


Название: Re: как сделать окно активным при открытии?
Отправлено: gil9red от Февраль 04, 2017, 19:22
баг какойто  ???
если жмякать много много раз, оно открывается сколько угодно раз

а нечего на каждый вызов создавать окно :)
в поле класса напишите окно и вызывайте когда нужно будет
или в функции на стеке создавать его и показывать через exec