C++ 有没有一种优雅的方式来激活一个焦点小部件所在的选项卡?

C++ 有没有一种优雅的方式来激活一个焦点小部件所在的选项卡?,c++,events,qt,user-interface,C++,Events,Qt,User Interface,我在QTabWidget的小部件中有一个QLineEdit。假设tab位于tab索引2。当当前活动选项卡位于索引1时,我调用setFocus和show,并在QLineEdit上提升,活动选项卡不会切换到索引2以显示聚焦小部件 当小部件获得焦点时,有没有优雅的方式显示焦点小部件的选项卡 谢谢 假设QTabWidget名为qtab: 在QLineEdit的FocusineEvent中: 假设QTabWidget名为qtab: 在QLineEdit的FocusineEvent中: 下面是一个更通用的函

我在QTabWidget的小部件中有一个QLineEdit。假设tab位于tab索引2。当当前活动选项卡位于索引1时,我调用setFocus和show,并在QLineEdit上提升,活动选项卡不会切换到索引2以显示聚焦小部件

当小部件获得焦点时,有没有优雅的方式显示焦点小部件的选项卡

谢谢

假设QTabWidget名为qtab:

在QLineEdit的FocusineEvent中:

假设QTabWidget名为qtab:

在QLineEdit的FocusineEvent中:


下面是一个更通用的函数,用于切换到包含小部件的选项卡:

void SwitchToTabContaining(QTabWidget * tabsW, QWidget * w)
{
    for(int i=0;i<tabsW->count();++i) {
        QWidget * tab = tabsW->widget(i);
        if(tab->isAncestorOf(w)) {
            tabsW->setCurrentWidget(tab);
            break;
        }
    }
}

它没有经过测试,但您应该了解它的工作原理。

这里有一个更通用的函数,可以切换到包含小部件的选项卡:

void SwitchToTabContaining(QTabWidget * tabsW, QWidget * w)
{
    for(int i=0;i<tabsW->count();++i) {
        QWidget * tab = tabsW->widget(i);
        if(tab->isAncestorOf(w)) {
            tabsW->setCurrentWidget(tab);
            break;
        }
    }
}

它没有经过测试,但您应该了解它是如何工作的。

对于您的特定情况,您可以确定QLineEdit是选项卡小部件之一的子部件:

myTabWidget->setCurrentIndex(myTabWidget->indexOf(myLineEdit->parentWidget()));

对于您的特定情况,您可以确定QLineEdit是选项卡小部件之一的子部件:

myTabWidget->setCurrentIndex(myTabWidget->indexOf(myLineEdit->parentWidget()));

line edit小部件可能不是tab小部件的直接子部件。同意,这只是针对特定给定情况的解决方案。我喜欢你的一般解决方案。行编辑小部件可能不是tab小部件的直接子部件。同意,这只是针对特定给定情况的解决方案。我喜欢你的通用解决方案。这已经足够好了,但是有没有办法让它更通用——接受任意嵌套的选项卡小部件?这将是一种完全不同的方法。接受此答案,然后发布另一个问题:这已经足够好了,但是有没有一种方法可以让它更通用——接受任意嵌套的选项卡小部件?这将是一种完全不同的方法。接受此答案,然后发布另一个问题: