Qt5中用QWidget实现模态对话框和非模态对话框

利用继承自QWidget的类来实现自己的模态对话框和非模态对话框
一、模态对话框
MyWidget是你自己定义的类,继承自QWidget,在它的构造函数中添加:

第一步:
以下两句效果一样,选择一句添加即可

setAttribute(Qt::WA_ShowModal, true);
//setWindowModality(Qt::ApplicationModal);

第二步:

MyWidget *myWidgetPtr = new MyWidget(); //没有父指针
myWidgetPtr->show(); //显示出来的就是模态对话框
//myWidgetPtr->close(); //关闭,也可以在MyWidget类中调用this->close();关闭

二、非模态对话框
只有一步:
(构造函数中不要加添加setAttribute(Qt::WA_ShowModal, true);
或者用setAttribute(Qt::WA_ShowModal, false); 显示指定。)

MyWidget *myWidgetPtr = new MyWidget(this); //必须有父指针
myWidgetPtr->show(); //显示出来的就是模态对话框
//myWidgetPtr->close(); //关闭,也可以在MyWidget类中调用this->close();关闭

额外说明:以上方法做出来的模态和非模态"对话框",模态的时候,显示的位置是默认位置,在屏幕中间;
而非模态的时候,它的位置是基于父窗口的。

自己定义一个doShow()函数,里面自己获取parent的左边和宽度,这样可以显示在父窗口的中间位置:

QRect parentRect = ((QWidget*)this->parent())->geometry();
move(parentRect.width()/2 - this->width()/2, parentRect.y()); //设置move到(0,0)点的时候,非模态窗口出现在父窗口的左上角
this->show(); 

你可能感兴趣的:(QT)