QTabWidget setCurrentIndex 无法按预期工作



如果用户满足某个条件,当用户单击QTabWidget的第二个选项卡时,我正在尝试将视图更改为主选项卡,但是当我在on_tabWidget_tabBarClicked()内调用setCurrentIndex()时,视图将保留在当前选项卡上。请参阅下面的代码。

如果我在on_tabWidget_tabBarClicked()之外调用setCurrentIndex(),那么它可以工作。

void MainWindow::on_tabWidget_tabBarClicked(int index)
{
if (index == 1)
{
Error("Empty, back to main");
ui->tabWidget->setCurrentIndex(0);
}
}

在你的情况下,问题是当信号被触发时,即使你的鼠标在QTabWidget上,所以即使你用setCurrentIndex(0)更改选项卡,鼠标事件也会将其改回1。在这种情况下,逻辑是稍后更改它,为此使用 QTimer:

void MainWindow::on_tabWidget_tabBarClicked(int index)
{
if(index==1)
{
Error("Empty, back to main");
QTimer::singleShot(100, [this](){ ui->tabWidget->setCurrentIndex(0); });
}
}

使用插槽on_tabWidget_currentChanged而不是 tabBarClicked 也可以正常工作,因为一旦选项卡更改完成,就会调用它。这将避免调用异步 QTimer 的需要。

void MainWindow::on_tabWidget_currentChanged(int index)
{
if (index == 1)
{
Error("Empty, back to main");
ui->tabWidget->setCurrentIndex(0);
}
}

相关内容

  • 没有找到相关文章

最新更新