想做类似gnucash中的悬浮效果
费劲周折,尝试了QDockWidget的setFloting(),也尝试了QMdiArea,效果都不理想。
搜到一个方法比较管用,发个链接备忘
主要代码如下
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
setAttribute(Qt::WA_TranslucentBackground, true);
悬浮窗要用到show(),并且为了和主界面保持一致,我在主界面的paintEvent()中调用了悬浮窗的repaint(),让悬浮窗根据主界面的geometry信息绘制。
悬浮窗的paintEvent主要代码如下
int x = m_pMainWindow->x() + MARGIN_LEFT;
int y = m_pMainWindow->y() - MARGIN_BOTTOM;
y += m_pMainWindow->height() - FIXED_HEIGHT;
QStatusBar* sb = m_pMainWindow->statusBar(); // 有状态栏时上移
if(sb && sb->isEnabled() && sb->isVisible())
y -= sb->height();
int w = m_pMainWindow->width() - MARGIN_LEFT - MARGIN_RIGHT;
int h = FIXED_HEIGHT;
this->setGeometry(x, y, w, h);
QWidget::paintEvent(e);