简述:
要实现的效果是:单击一个按钮,弹出一个不带标题栏(FramelessWindowHint)的子窗口,且位置在按钮下方,若单击父窗口的其他位置,则弹出的子窗口会隐藏。
1、设置setWindowFlags
在弹出的子窗口构造函数添加:
DataConnectSetup::DataConnectSetup(QWidget *parent) : QWidget(parent){setWindowFlags(Qt::FramelessWindowHint|Qt::Popup);}
Qt窗体若设置了setWindowFlags (Qt::FramelessWindowHint); 运行后该窗体是不带标题栏,且无法进行移动和调整大小的。
2、重写鼠标事件 mousePressEvent
在弹出的子窗口重写鼠标事件:
void DataConnectSetup::mousePressEvent(QMouseEvent *e){setAttribute(Qt::WA_NoMouseReplay);QWidget::mousePressEvent(e);}
实现效果是若单击主窗口的其他位置,则弹出的子窗口会隐藏。
3、实现定位
在父窗口中按钮的槽函数添加下面代码:
void SerialDataSet::connectSet() //connect Button的槽函数{connectSetDlg = new DataConnectSetup(); //定义弹出子窗口QPoint moveTo = m_connectSetBtn->mapToGlobal(QPoint(0,0));moveTo += QPoint(20, 38); //具体位置自行调试connectSetDlg->move(moveTo);connectSetDlg->show();}