Qt 按钮弹窗问题

简述:

要实现的效果是:单击一个按钮,弹出一个不带标题栏(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();
}

转自:https://blog.csdn.net/hebbely/article/details/54234588

猜你喜欢

转载自blog.csdn.net/qq_25800311/article/details/82052412