Я пытаюсь разместить полупрозрачный Qwidget сверх моего QWindow , который я обернул в контейнер, используя Qwidget :: CreateWindowContainer . Мне удалось показать их отдельно, но не одновременно. Любая справка оценена, может добавить любые данные. < /P>
В создании окна игры. < /P>
void AetherEngine::createInGameWindow()
{
qVulkanInstance.setApiVersion(QVersionNumber(1, 0));
if (vkInit.enableValidationLayers) {
qVulkanInstance.setLayers(QByteArrayList() setParent(mainWindow->windowHandle());
inGameWindow->resize(windowWidth, windowHeight);
inGameWindow->setTitle("Aether");
inGameWindow->create();
vkInit.surface = qVulkanInstance.surfaceForWindow(inGameWindow);
if (vkInit.surface == VK_NULL_HANDLE) {
throw std::runtime_error("Failed to create Vulkan surface for Qt window.");
}
inGameContainerWidget = new QWidget;
inGameContainerWidget->setFixedSize(windowWidth, windowHeight);
inGameStackedLayout = new QStackedLayout(inGameContainerWidget);
inGameStackedLayout->setStackingMode(QStackedLayout::StackAll);
inGameWidget = QWidget::createWindowContainer(inGameWindow, inGameContainerWidget);
inGameStackedLayout->addWidget(inGameWidget);
connect(inGameWindow, &InGameWindow::framebufferResized, this, &AetherEngine::onFramebufferResized);
connect(inGameWindow, &InGameWindow::windowClosed, [this]() {
gameContext.requestedGameState = GameState::EXIT;
});
}
< /code>
Пауза.void AetherEngine::createPauseMenuWidget() {
pauseMenuWidget = new PauseMenuWidget(inGameContainerWidget);
pauseMenuWidget->setFixedSize(windowWidth, windowHeight);
pauseMenuWidget->setAttribute(Qt::WA_TranslucentBackground, true);
inGameStackedLayout->addWidget(pauseMenuWidget);
connect(pauseMenuWidget, &PauseMenuWidget::resumeGame, [this]() {
gameContext.requestedGameState = GameState::IN_GAME;
});
connect(pauseMenuWidget, &PauseMenuWidget::openSettings, [this]() {
gameContext.requestedGameState = GameState::SETTINGS_MENU;
});
connect(pauseMenuWidget, &PauseMenuWidget::openMainMenu, [this]() {
gameContext.requestedGameState = GameState::MAIN_MENU;
});
connect(pauseMenuWidget, &PauseMenuWidget::exitGame, [this]() {
gameContext.requestedGameState = GameState::EXIT;
});
}
< /code>
Классы они наследуют. < /p>
class PauseMenuWidget : public QWidget
class InGameWindow : public QWindow
< /code>
переменные, которые у меня есть в своем основном классе. < /p>
QStackedWidget* stackedWidget = nullptr;
MainWindow* mainWindow = nullptr;
MainMenuWidget* mainMenuWidget = nullptr;
SettingsMenuWidget* settingsMenuWidget = nullptr;
PauseMenuWidget* pauseMenuWidget = nullptr;
InGameWindow* inGameWindow = nullptr;
QWidget* inGameContainerWidget = nullptr;
QWidget* inGameWidget = nullptr;
QStackedLayout* inGameStackedLayout = nullptr;
< /code>
Как я пытаюсь показать виджеты < /p>
void AetherEngine::changeState(GameState newGameState) {
if (gameContext.currentGameState == newGameState) {
std::cout setCurrentWidget(settingsMenuWidget);
break;
case GameState::IN_GAME:
QApplication::setOverrideCursor(Qt::BlankCursor);
character.camera._isFirstMouse = true;
stackedWidget->setCurrentWidget(inGameContainerWidget);
break;
case GameState::PAUSED:
pauseMenuWidget->show();
pauseMenuWidget->raise();
break;
case GameState::EXIT:
QCoreApplication::quit();
break;
default:
break;
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... er-qwidget
Qt6 Как разместить полупрозрачный Qwidget через другой Qwidget ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1746348961
Anonymous
Я пытаюсь разместить полупрозрачный Qwidget сверх моего QWindow , который я обернул в контейнер, используя Qwidget :: CreateWindowContainer . Мне удалось показать их отдельно, но не одновременно. Любая справка оценена, может добавить любые данные. < /P>
В создании окна игры. < /P>
void AetherEngine::createInGameWindow()
{
qVulkanInstance.setApiVersion(QVersionNumber(1, 0));
if (vkInit.enableValidationLayers) {
qVulkanInstance.setLayers(QByteArrayList() setParent(mainWindow->windowHandle());
inGameWindow->resize(windowWidth, windowHeight);
inGameWindow->setTitle("Aether");
inGameWindow->create();
vkInit.surface = qVulkanInstance.surfaceForWindow(inGameWindow);
if (vkInit.surface == VK_NULL_HANDLE) {
throw std::runtime_error("Failed to create Vulkan surface for Qt window.");
}
inGameContainerWidget = new QWidget;
inGameContainerWidget->setFixedSize(windowWidth, windowHeight);
inGameStackedLayout = new QStackedLayout(inGameContainerWidget);
inGameStackedLayout->setStackingMode(QStackedLayout::StackAll);
inGameWidget = QWidget::createWindowContainer(inGameWindow, inGameContainerWidget);
inGameStackedLayout->addWidget(inGameWidget);
connect(inGameWindow, &InGameWindow::framebufferResized, this, &AetherEngine::onFramebufferResized);
connect(inGameWindow, &InGameWindow::windowClosed, [this]() {
gameContext.requestedGameState = GameState::EXIT;
});
}
< /code>
Пауза.void AetherEngine::createPauseMenuWidget() {
pauseMenuWidget = new PauseMenuWidget(inGameContainerWidget);
pauseMenuWidget->setFixedSize(windowWidth, windowHeight);
pauseMenuWidget->setAttribute(Qt::WA_TranslucentBackground, true);
inGameStackedLayout->addWidget(pauseMenuWidget);
connect(pauseMenuWidget, &PauseMenuWidget::resumeGame, [this]() {
gameContext.requestedGameState = GameState::IN_GAME;
});
connect(pauseMenuWidget, &PauseMenuWidget::openSettings, [this]() {
gameContext.requestedGameState = GameState::SETTINGS_MENU;
});
connect(pauseMenuWidget, &PauseMenuWidget::openMainMenu, [this]() {
gameContext.requestedGameState = GameState::MAIN_MENU;
});
connect(pauseMenuWidget, &PauseMenuWidget::exitGame, [this]() {
gameContext.requestedGameState = GameState::EXIT;
});
}
< /code>
Классы они наследуют. < /p>
class PauseMenuWidget : public QWidget
class InGameWindow : public QWindow
< /code>
переменные, которые у меня есть в своем основном классе. < /p>
QStackedWidget* stackedWidget = nullptr;
MainWindow* mainWindow = nullptr;
MainMenuWidget* mainMenuWidget = nullptr;
SettingsMenuWidget* settingsMenuWidget = nullptr;
PauseMenuWidget* pauseMenuWidget = nullptr;
InGameWindow* inGameWindow = nullptr;
QWidget* inGameContainerWidget = nullptr;
QWidget* inGameWidget = nullptr;
QStackedLayout* inGameStackedLayout = nullptr;
< /code>
Как я пытаюсь показать виджеты < /p>
void AetherEngine::changeState(GameState newGameState) {
if (gameContext.currentGameState == newGameState) {
std::cout setCurrentWidget(settingsMenuWidget);
break;
case GameState::IN_GAME:
QApplication::setOverrideCursor(Qt::BlankCursor);
character.camera._isFirstMouse = true;
stackedWidget->setCurrentWidget(inGameContainerWidget);
break;
case GameState::PAUSED:
pauseMenuWidget->show();
pauseMenuWidget->raise();
break;
case GameState::EXIT:
QCoreApplication::quit();
break;
default:
break;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79583379/qt6-how-to-place-semi-transparent-qwidget-over-another-qwidget[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия