qt中的弹出窗口小部件
Popup widget in qt
如何在qt中创建?
当您点击按钮时 - 应显示弹出窗口小部件,其宽度应为按钮宽度。
如果 main window(主窗体)拖动到屏幕上的另一个位置 - 弹出窗口小部件应连续跟随按钮(必须附加到按钮的底部边框)。
点击图片前:
点击图片后:
创建小部件,不要把它放在任何布局中,将它的父级设置为按钮的父级(我们称它为“主机”),将 window 标志设置为 Qt::Window | Qt::FramelessWindowHint
mPopup = new QWidget(this);
mPopup->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
覆盖宿主的 resizeEvent
和 moveEvent
并使用按钮的几何形状调整弹出窗口的几何形状。
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
如何在qt中创建?
当您点击按钮时 - 应显示弹出窗口小部件,其宽度应为按钮宽度。 如果 main window(主窗体)拖动到屏幕上的另一个位置 - 弹出窗口小部件应连续跟随按钮(必须附加到按钮的底部边框)。
点击图片前:
点击图片后:
创建小部件,不要把它放在任何布局中,将它的父级设置为按钮的父级(我们称它为“主机”),将 window 标志设置为 Qt::Window | Qt::FramelessWindowHint
mPopup = new QWidget(this);
mPopup->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
覆盖宿主的 resizeEvent
和 moveEvent
并使用按钮的几何形状调整弹出窗口的几何形状。
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