【问题标题】:Popup widget in qtqt中的弹出小部件
【发布时间】:2021-06-28 16:58:32
【问题描述】:

如何在qt中创建?

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

点击图片前:

点击图片后:

【问题讨论】:

    标签: c++ qt popup qwidget qframe


    【解决方案1】:

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

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

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

    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();
    }
    

    完整来源:button-popup

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      相关资源
      最近更新 更多