将父级设置为Qdialog时,不能使用setWindowsFlag

时间:2015-05-25 17:13:57

标签: qt qdialog

QDialogmainWindow的孩子。我的问题是,当为对话框设置父级时,我无法使用setWindowsFlag:对话框粘贴在MainWindow的左上角并且是透明的。代码如下所示:

mainWindow::MainWindow(QWidget* parent): QMainWindow(parent)
{
   this->setWindowsFlags(Qt::FramelessWindowHint);
   mpConfirmDialog = new ConfirmDialog();//mpConfirmDialog is a pointer and member of MainWindow
   mpConfirmDialog->setParent(ui->centralWidget) ;//pass ui->centralWidget in constructor cause crash when exit????
   mpConfirmDialog->hide();
}

在ConfirmDialog的构造函数中:

ConfirmDialog::ConfirmDialog(QWidget* parent){
    this->setWindowsFlags(Qt::FramelessWindowHint);// only effective if comment  mpConfirmDialog->setParent(ui->centralWidget) in MainWindow
}

任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

操作系统之间存在一些不一致,但我们应该记住,父类构造函数很可能已经设置了一些标志,而标志添加逻辑是按位OR。我们可以尽力确保我们不会丢失这些旗帜。

this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);

这可能对程度有所帮助,但当然我没有您的环境和整个代码示例来证明。