Окно содержит QVTKOpenGLNativeWidget, используемый для 3D-рендеринга, завернутый в QFrame.
Поверх него QStackedLayout с режимом StackAll добавляет наложение QWidget, содержащий элементы управления пользовательского интерфейса, такие как QComboBox.
Все работает нормально:
Код: Выделить всё
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char* argv[]){
QApplication app(argc, argv);
QMainWindow window;
QWidget* central = new QWidget;
window.setCentralWidget(central);
QStackedLayout* stacked = new QStackedLayout(central);
stacked->setStackingMode(QStackedLayout::StackAll);
// QFrame container for VTK widget
QFrame* frame = new QFrame;
frame->setFrameShape(QFrame::Box);
frame->setLineWidth(2);
QVBoxLayout* frameLayout = new QVBoxLayout(frame);
frameLayout->setContentsMargins(0, 0, 0, 0);
frameLayout->setSpacing(0);
// VTK Widget
auto vtkRenderWidget = new QVTKOpenGLNativeWidget;
auto renderWindow = vtkSmartPointer::New();
auto renderer = vtkSmartPointer::New();
renderWindow->AddRenderer(renderer);
vtkRenderWidget->setRenderWindow(renderWindow);
renderer->SetBackground(0.1, 0.1, 0.2);
frameLayout->addWidget(vtkRenderWidget);
stacked->addWidget(frame);
// Overlay with QComboBox
QWidget* overlay = new QWidget;
overlay->setStyleSheet("background: rgba(255, 0, 0, 40);");
stacked->addWidget(overlay);
QVBoxLayout* vbox = new QVBoxLayout(overlay);
QLabel* label = new QLabel("Select value:");
QComboBox* combo = new QComboBox;
combo->addItems({ "Value 1", "Value 2", "Value 3" });
vbox->addWidget(label);
vbox->addWidget(combo);
vbox->addStretch();
stacked->setCurrentIndex(1);
window.showFullScreen();
//window.resize(800, 600);
//window.show();
return app.exec();
}
Я использую Qt 6.8.3, VTK 9.4.2 и Visual Studio 2022 (MSVC 17) в Windows 11. Примечательно, что если я нажму клавишу Win, а затем нажму на поле со списком, отобразится список.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ativewidge
Мобильная версия