Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
Flassie
184 / 169 / 38
Регистрация: 03.08.2012
Сообщений: 594
Завершенные тесты: 2
#1

[5.1] Виджет поверх виджетов - C++ Qt

06.09.2013, 20:48. Просмотров 3649. Ответов 8
Метки нет (Все метки)

Есть QStackedWidget и QPushButton, виден только QStackedWidget. Нужно сделать так, что бы когда появляется QPushButton, он был с возможностью нажатия.

Проблема: Когда появляется QPushButton, он оказывается слоем ниже QStackedWidgeta и получается так, что его нельзя нажать.

hide() и show() - не выход. Данные на QStackedWidget должны быть видны.

P.S. Интерфейс построен в Дизайнере
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2013, 20:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос [5.1] Виджет поверх виджетов (C++ Qt):

Есть составной виджет с кучей дочерних виджетов, как правильно установить eventFilter
Привет! Есть QFrame с кучей всяких баттонов на нём, хочу сделать обработку...

Эффект затемнения, поверх которого виджет
То есть при нажатии на кнопку, все окно программы затемняется (альфа-тень), а...

Как расположить виджет поверх других
Не подскажите ли, как сделать что-то типа BringToFront из Бюльдера? Просто в...

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

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

Отображение виджетов
Нужно накидать виджетов на форму, соединив их лейаутами, без дизайнера, не могу...

8
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
06.09.2013, 22:42 #2
А создать отдельный лейаут и поместить туда два эти виджета не получается?
0
Flassie
184 / 169 / 38
Регистрация: 03.08.2012
Сообщений: 594
Завершенные тесты: 2
06.09.2013, 23:04  [ТС] #3
Цитата Сообщение от xtorne21st Посмотреть сообщение
А создать отдельный лейаут и поместить туда два эти виджета не получается?
Мог бы показать пример?
0
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
07.09.2013, 02:18 #4
mainwindow.h
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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QWidget>
#include <QApplication>
#include <QStackedWidget>
#include <QListWidgetItem>
 
class MainWindow : public QWidget
{
    Q_OBJECT
    
public:
    MainWindow(QApplication& m_App, QWidget *p_Parent = NULL);
 
public slots:
    void slotNextWidget();
 
private:
    QStackedWidget* pStackedWidget;
};
 
#endif // MAINWINDOW_H
mainwindow.cpp
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
41
#include "mainwindow.h"
 
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
 
MainWindow::MainWindow(QApplication& m_App, QWidget* p_Parent)
 
    : QWidget(p_Parent)
{
    pStackedWidget = new QStackedWidget;
    pStackedWidget->addWidget(new QLabel("<h2><font color = red>Red</font></h2>"));
    pStackedWidget->addWidget(new QLabel("<h2><font color = green>Green</font></h2>"));
 
    QPushButton* pNextButton = new QPushButton(tr("Next color"));
    QHBoxLayout* pDoubleLayout = new QHBoxLayout;
    pDoubleLayout->addWidget(pNextButton);
    pDoubleLayout->addWidget(pStackedWidget);
    QObject::connect(pNextButton, SIGNAL(clicked()), this, SLOT(slotNextWidget()));
 
    QPushButton* pQuitButton = new QPushButton(tr("Quit"));
    QVBoxLayout* pMainLayout = new QVBoxLayout;
    pMainLayout->addLayout(pDoubleLayout);
    pMainLayout->addWidget(pQuitButton);
    QObject::connect(pQuitButton, SIGNAL(clicked()), &m_App, SLOT(quit()));
 
    setLayout(pMainLayout);
}
 
void MainWindow::slotNextWidget()
{
    qint32 nCount = pStackedWidget->count();
    qint32 nIndex = pStackedWidget->currentIndex();
    nIndex = nIndex + 1; // @note: Next.
    if (nIndex == nCount)
    {
        nIndex = 0;
    }
    pStackedWidget->setCurrentIndex(nIndex);
}
main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
#include <QApplication>
 
#include "mainwindow.h"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w(a);
    w.show();
    
    return a.exec();
}
1
Flassie
184 / 169 / 38
Регистрация: 03.08.2012
Сообщений: 594
Завершенные тесты: 2
07.09.2013, 15:04  [ТС] #5
xtorne21st, не получается. Изначально она находиться снизу, но выезжает и в конечном итоге находится в том месте, где находится QStackedWidget, в результате она просто некликабельна
0
RaiaNKnight
96 / 70 / 12
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
07.09.2013, 16:15 #6
Цитата Сообщение от Flassie Посмотреть сообщение
xtorne21st, не получается. Изначально она находиться снизу, но выезжает и в конечном итоге находится в том месте, где находится QStackedWidget, в результате она просто некликабельна
Правильно ли я понял, что необходимо в QStackedWidget положить QPushButton и обрабатывать сигнал, например, clicked() этого QPushButton при его появлении в QStackedWidget?
Просто не совсем однозначно звучит то, что вам нужно

Добавлено через 15 минут
Попробовал сделать то, о чём вы говорите:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
//добавить это в конструктор класса MainWindow
QPushButton *stackedButton = new QPushButton("Сlick");
pStackedWidget->addWidget( stackedButton );
connect(stackedButton,SIGNAL(clicked()),
            this,SLOT(sl_showMessageBox()));
//-----------------------------------------------------
//не забыть заинклюдить QMessageBox в mainwindow.cpp
void MainWindow::sl_showMessageBox() {
    QMessageBox mb;
    mb.critical(NULL,"Critical!","Critical message",QMessageBox::Ok);
}
При появлении QPushButton в QStackedWidget событие клика отрабатывается корректно - об этом должен говорить появляющийся QMessageBox
1
Flassie
184 / 169 / 38
Регистрация: 03.08.2012
Сообщений: 594
Завершенные тесты: 2
07.09.2013, 17:16  [ТС] #7
RaiaNKnight, прикладываю две картинки окна. На картинках полу-прозрачным белым фоном показана область QStackedWidget. Кнопка settings, про которую я говорю - может быть нажата, потому что находиться не в том месте, где стоит QStackedWidget. На первой картинке показано, где находится кнопка, после ее нажатия. Кнопку в этом месте нажать НЕЛЬЗЯ, по сути мы кликаем по QStackedWidget, под которым находится кнопка.

P.S. Прошу прощения за мои "кривые" обьяснения
0
Миниатюры
[5.1] Виджет поверх виджетов   [5.1] Виджет поверх виджетов  
RaiaNKnight
96 / 70 / 12
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
07.09.2013, 19:12 #8
Так, теперь понятно)
Почему вы не "присоединили" кнопку "Settings" к окну настроек?
Почему она не находится в одном "слое" с этим окном настроек? Сделайте эту кнопку в одном виджете с этим окном.
Если активным виджетом(?) у вас будет являться окно настроек на первом скриншоте, то и сигналы кнопки будут корректно обрабатываться.
А вообще, что-то тут не чисто в плане имеющейся иерархии виджетов. Лучше сам код глянуть, если он не секретный, конечно.
1
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
07.09.2013, 22:02 #9
Я не пойму, почему является проблемой добавить 2 виджета: стакид и ваш пуш бутон в один лейаут?

Добавлено через 1 минуту
И дальше меняете как вам угодно ваш стакид виджет, а пуш бутон всегда будет виден...

Добавлено через 43 секунды
Ведь этого вы добиваетесь?
1
07.09.2013, 22:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2013, 22:02
Привет! Вот еще темы с решениями:

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

Раздвижение виджетов [Qt/C++]
Приветсвую всех:)! Вот такой у меня возник вопрос: как сделать...

Выравнивание виджетов
Добрый день, хотелось бы понять, имеется QTAbWidget, внутри него QHBoxLayout, в...

обновление виджетов
Подскажите как обновить виджет с Layout'том. Ну допустим QWidget win;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru