gpt4 book ai didi

c++ - 设置 Qt QPushButton 弹出菜单的位置(向右)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:26 48 4
gpt4 key购买 nike

我正在为 Qt 按钮小部件编写弹出菜单。每当单击按钮时,都会弹出一个菜单(在按钮下方)。

弹出菜单默认位于下方左侧。

有没有办法让弹出菜单在按钮下方的右侧弹出?

没有设置位置功能,所以我想知道是否有一些复杂的方法可以做到这一点?

这是一些代码(用于弹出菜单):

QMenu *menuMode = new QMenu(this);
min = menu ->addAction("In");
mout = menu ->addAction("out");
ui->pushButtonMode->setMenu(menuMode); //I am writing in MainWindow, that's there is ui

最佳答案

这可以通过子类化 QMenu 并将弹出菜单移动到您希望在 showEvent 中拥有它的位置来完成:

弹出菜单.h

#ifndef POPUPMENU_H
#define POPUPMENU_H

#include <QMenu>

class QPushButton;
class QWidget;

class PopupMenu : public QMenu
{
Q_OBJECT
public:
explicit PopupMenu(QPushButton* button, QWidget* parent = 0);
void showEvent(QShowEvent* event);
private:
QPushButton* b;
};

#endif // POPUPMENU_H

弹出菜单.cpp

#include "popupmenu.h"
#include <QPushButton>

PopupMenu::PopupMenu(QPushButton* button, QWidget* parent) : QMenu(parent), b(button)
{
}

void PopupMenu::showEvent(QShowEvent* event)
{
QPoint p = this->pos();
QRect geo = b->geometry();
this->move(p.x()+geo.width()-this->geometry().width(), p.y());
}

主窗口.cpp

...
PopupMenu* menu = new PopupMenu(ui->pushButton, this);
...
ui->pushButton->setMenu(menu);

看起来像这样:

enter image description here

关于c++ - 设置 Qt QPushButton 弹出菜单的位置(向右),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31668623/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com