如果用户满足某个条件,当用户单击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);
}
}