写了个按钮菜单,出来效果是这样的:
但实际想要的是这样的:
具体怎么实现呢?下面来写个测试程序试一下。
menuButton = new QPushButton(this);
createMenu();
menuButton->setMenu(menu);
mainLayout = new QHBoxLayout(this);
mainLayout->addWidget(menuButton);
运行如下:
可是怎么能达到想要的效果呢?其实简单:
代码如下:
menu->installEventFilter(this)
bool MenuTest::eventFilter(QObject * obj, QEvent *event)
{
if (event->type() == QEvent::Show && obj == menuButton->menu())
{
int menuXPos = menuButton->menu()->pos().x();
int menuWidth = menuButton->menu()->size().width();
int buttonWidth = menuButton->size().width();
QPoint pos = QPoint(menuXPos - menuWidth + buttonWidth,
menuButton->menu()->pos().y());
menuButton->menu()->move(pos);
return true;
}
return false;
}
运行如下:
菜单位置正确了,但还有个三角仍需去掉。下面只需在 *.qss 文件中添加
QPushButton#menuButton:menu-indicator{
image: none
}
或者:
menuButton->setStyleSheet("QPushButton::menu-indicator{image:none}");
最终效果如下:
源码下载地址:点击打开链接
http://download.csdn.net/download/ibaiyu/10189937