Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 13
1

Появление виджета поверх и по центру другого

26.08.2017, 23:09. Показов 972. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, помогите решить проблему новичку в программировании.
Пытаюсь сделать самостоятельно приложение телефонная книга.
Вообщем main.cpp такoй:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int main(int argc, char *argv[])
{
    QApplication PhoneBook(argc, argv);
 
    QWidget MainWindow;
    MainWindow.setFixedSize(300,480);
   
    PB_main_page *main_page = new PB_main_page(&MainWindow);
    main_page->show();
 
    PB_add_page *add_page = new PB_add_page(&MainWindow);
    add_page->hide();
 
    PB_remove_page *remove_page = new PB_remove_page(&MainWindow);
    remove_page->hide();
 
    PB_search_page *search_page = new PB_search_page(&MainWindow);
    search_page->hide();
 
//to add_page&back
    QObject::connect(main_page->b_add, SIGNAL(clicked()), add_page, SLOT(button_show()));
    QObject::connect(add_page, SIGNAL(clicked_show()), main_page, SLOT(hide()));
    QObject::connect(add_page->b_back, SIGNAL(clicked()), add_page, SLOT(button_hide()));
    QObject::connect(add_page, SIGNAL(clicked_hide()), main_page, SLOT(show()));
 
    //to remove_page&back
    QObject::connect(main_page->b_delete, SIGNAL(clicked()), remove_page, SLOT(button_show()));
    QObject::connect(remove_page, SIGNAL(clicked_show()), main_page, SLOT(hide()));
    QObject::connect(remove_page->b_back, SIGNAL(clicked()), remove_page, SLOT(button_hide()));
    QObject::connect(remove_page, SIGNAL(clicked_hide()), main_page, SLOT(show()));
 
    //to search_page&back
    QObject::connect(main_page->b_search, SIGNAL(clicked()), search_page, SLOT(button_show()));
    QObject::connect(search_page, SIGNAL(clicked_show()), main_page, SLOT(hide()));
    QObject::connect(search_page->b_back, SIGNAL(clicked()), search_page, SLOT(button_hide()));
    QObject::connect(search_page, SIGNAL(clicked_hide()), main_page, SLOT(show()));
 
    //to quit
    QObject::connect(main_page->b_exit, SIGNAL(clicked()), &PhoneBook, SLOT(quit()));
}
Тоесть, в зависимости от того на какую кнопку в виджете main_page я нажимаю, попадаю в виджеты add_page, remove_page, search_page.
Загвоздка в том, что как реализовать, такой момент:
В виджете add_page у меня есть кнопка Add contact, я хочу, чтобы когда я ее нажимаю, то появлялось окно с текстом такой-то контакт добавлен и кнопка ОК, и должно оно появляться поверх виджета add_page прям по центру. Я пытаюсь получить значения координат add_page через метод pos() возвращающий QPoint, который я могу передать в move(QPoint).
В коде выглядит у меня это так:
C++ (Qt)
1
2
3
4
    PB_engine *button_ok = new PB_engine; //создается виджет с кнопкой Ок и надписью
    button_ok->move(b_add_contact->pos()); // передаю значения координат кнопки Add contact в виджете add_page
    button_ok->msg->setText(PB_add_page::name + " was added");
    button_ok->show();
но проблема в том что виджет add_page встроен в MainWindow, и координаты у него отсчитываются по другому, как будто MainWindow для него и есть экран. Тоесть там где у экран монитора и виджета MainWindow координата x = 500, y=500, для виджета add_page это x=0, y=0. И так как виджет с кнопкой Ок не встроен в MainWindow, появляется отдельным окном, то координаты x, y виджета add_page уносят его в край монитора. Надеюсь, кто-нибудь понял что я написал )
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2017, 23:09
Ответы с готовыми решениями:

наложение виджета поверх другого
Подскажите как наложить виджет(например чекбокс) поверх другого виджета на экране? гуглил, гуглил,...

Размещение виджета поверх другого
Доброго времени суток. Имею форму с компоновкой Grid Layout. На ней размещен Graphics View....

Виджет не рисует поверх другого виджета
Здравствуйте! Столкнулся с проблемой, нужно вставить один виджет поверх другого(абсолютное...

Как добраться до виджета, который находится внутри другого виджета?
Есть QStackWidget, внутри которого на одной из страниц-виджетов находится QTabWidget....

2
59 / 49 / 19
Регистрация: 16.06.2015
Сообщений: 206
30.08.2017, 13:24 2
Может быть тебе помогут функции класса QWidget
mapFromGlobal
mapFrom
mapToGlobal
для преобразования координат вывода
1
0 / 0 / 0
Регистрация: 14.07.2017
Сообщений: 13
30.08.2017, 20:42  [ТС] 3
terriblemike, спасибо за ответ!
Я решил эту проблему по-другому. Вообщем, вместо своего самодельного виджета с кнопкой и текстом я, просто, использовал виджет QMassegeBox с указателем this, и в отличии от самодельного виджета, которому если указать this, происходит его встраивание в родительский, виджет QMassegeBox отображается отдельным окном и как раз по центру родительского, в каком месте экрана он не находился бы.
0
30.08.2017, 20:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2017, 20:42
Помогаю со студенческими работами здесь

Вызов одного виджета из другого виджета
добрый день, есть 2 формы, сделанные в дизайнере. По нажатию на кнопку из формы 1 хочу чтобы...

Появление виджета и расчет размеров
Задача расположить виджет в право нижнем углу. Для этого нужно получить размеры рабочей области...

Рисование поверх виджета
Всем добрый день! У меня следующая проблема, которую я никак не могу решить: у меня есть виджет, на...

Окно виджета поверх других
Всем привет, сделал так, чтобы виджет всегда был поверх остальных окон. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru