QTabWidget选项卡上下文菜单

时间:2009-09-30 03:12:02

标签: c++ qt qt4 qtabwidget

每当单击选项卡时,我都需要显示上下文菜单,并且需要对该特定选项卡作出反应。有没有办法在不进行子类化的情况下做到这一点?

3 个答案:

答案 0 :(得分:5)

简单的方法,但可能不是您需要的:

  1. 连接到QTabWidget的“currentChanged”信号
  2. 在连接到信号的插槽中,创建一个QMenu并根据需要填充它
  3. 最后,在连接到信号的插槽中,调用QMenu :: exec(QCursor :: pos())
  4. 只要更改选项卡(不一定点击),就会调用一个函数 在当前鼠标位置产生一个菜单。

    复杂的方式,完全符合你的描述:

    1. 在QTabWidget上调用QObject::installEventFilter,以便将QTabWidget上的所有事件重定向到您自己的对象。
    2. 在您自己的对象中,重新实现QObject::customEvent并处理所有QMouseEvent事件。
    3. 根据需要填充QMenu,并在您正在处理的QMouseEvent的位置调用QMenu :: exec。

答案 1 :(得分:2)

创建一个QMenu:

m_menu = new QMenu;

将操作添加到菜单。

创建在选项卡栏上请求上下文菜单时要调用的插槽:

connect(m_tabWidget->tabBar(), &QTabBar::tabBarClicked, this, &MyClass::on_contextMenuRequested);

在插槽中,显示菜单。广告位的定义:

void MyClass::on_contextMenuRequested(int tabIndex)
{
    m_menu->popup(QCursor::pos());
}

如果您需要在其他功能中使用当前标签的索引,请使用以下命令:

m_tabWidget->tabBar()->currentIndex()

答案 2 :(得分:0)

我认为您需要创建自己的继承自QTabWidget的类并覆盖MousePressEvent(QMouseEvent)保护的函数,您可以在其中右键单击创建上下文菜单。