Я пытаюсь разместить полупрозрачный 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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение