今天看到一个创建自定义弹窗的程序,里面的创建不规则弹窗的思路不错。Qt自定义按钮弹窗控件
这个不规则窗口是由两部分组成的,用事件过滤器过滤事件,当不规则弹窗要显示时,根据点击的按钮的位置确定不规则弹窗两部分的位置,将两部分移到相应的位置。
绘制三角形的代码:
void PopupTriangleWidget::paintEvent(QPaintEvent *e)
{
Q_UNUSED(e)
QPainter painter(this);
QPainterPath path;
QStyleOption opt;
opt.init(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QColor("lightgray"));
painter.setBrush(QBrush(QColor("#fafafa")));
QVector<QPointF> points;
if (m_orien == PWB::Horizontal) {
points << QPointF(width(), height()) << QPointF(0, height()/2) << QPointF(width(), 0);
QPolygonF polyF(points);
path.addPolygon(polyF);
painter.drawPath(path);
} else if (m_orien == PWB::Vertical) {
points << QPointF(0, height()) << QPointF(width()/2, 0) << QPointF(width(), height());
QPolygonF polyF(points);
path.addPolygon(polyF);
painter.drawPath(path);
}
}
当点击标题栏时隐藏弹窗:
// 点击标题栏
else if (event->type() == QEvent::NonClientAreaMouseButtonRelease ||
event->type() == QEvent::NonClientAreaMouseButtonPress ||
event->type() == QEvent::NonClientAreaMouseButtonDblClick) {
......
}
思路非常不错,向大佬致敬 []~( ̄▽ ̄)~* 干杯。