#include "widget.h" #include #include #include #include TestWidget::TestWidget(QWidget *parent) : QWidget(parent) { setFixedSize(600, 400); QPushButton* ptr_button = new QPushButton(this); ptr_button->setText("i am unresponsive"); ptr_button->setFixedSize(200, 50); ptr_button->show(); QWidget* ptr_w = new QWidget(this); ptr_w->winId(); // key code QVBoxLayout* ptr_layout = new QVBoxLayout(this); ptr_layout->addWidget(ptr_button); ptr_layout->addWidget(ptr_w); } Widget::Widget(QWidget *parent) : QWidget(parent) { setFixedSize(600, 400); ptr_curtain_ = new Curtain(); QPushButton* ptr_button = new QPushButton(this); ptr_button->setText("click me to show widget"); ptr_button->setFixedSize(200, 50); connect(ptr_button, &QPushButton::clicked, this, [=]() { if (ptr_curtain_ != NULL) { QTimer::singleShot(0, this, [=]() { TestWidget* ptr_test = new TestWidget; ptr_test->show(); ptr_curtain_->Quit(); ptr_curtain_->deleteLater(); ptr_curtain_ = NULL; }); ptr_curtain_->Exec(); } }); } Widget::~Widget() { } Curtain::Curtain(QWidget *parent) : QWidget(parent) { setWindowModality(Qt::ApplicationModal); // key code setFixedSize(300, 300); } void Curtain::Exec() { show(); exec_ = true; while (exec_) { qApp->processEvents(); } } void Curtain::Quit() { close(); exec_ = false; }