1

如何在qt中创建它?

当您单击按钮时 - 应显示弹出窗口小部件,其宽度应为 = 按钮宽度。如果主窗口(主窗体)拖到屏幕上的另一个位置 - 弹出小部件应连续跟随按钮(必须附加到按钮的底部边框)。

点击图片前:
点击图片之前

点击图片后:
点击图片后

4

1 回答 1

1

创建小部件,不要放置任何布局,将其父级设置为按钮的父级(我们称之为“主机”),将窗口标志设置为Qt::Window | Qt::FramelessWindowHint

mPopup = new QWidget(this);
mPopup->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);

覆盖主机的resizeEventandmoveEvent并使用按钮的几何形状调整弹出窗口的几何形状。

void Host::adjustPopup() {
    if (!mPopup->isVisible()) {
        return;
    }
    QRect rect = mButton->geometry();
    QPoint bottomLeft = this->mapToGlobal(rect.bottomLeft());
    mPopup->setGeometry(QRect(bottomLeft, QSize(rect.width(),200)));
}

void Host::resizeEvent(QResizeEvent *event)
{
    QWidget::resizeEvent(event);
    adjustPopup();
}

void Host::moveEvent(QMoveEvent *event)
{
    QWidget::moveEvent(event);
    adjustPopup();
}

完整来源:按钮弹出

于 2021-04-01T17:41:35.830 回答