Как определить, когда текущая вкладка изменяется в QTabWidget? - PullRequest
9 голосов
/ 29 ноября 2011

Я использую QTabWidget, и мне нужен способ обработать изменение текущей вкладки до того, как это произойдет, и, возможно, отменить его, если будут выполнены определенные условия. Сигнал QTabWidget::currentChanged принимается после изменения текущей вкладки, но есть ли сигнал QTabWidget::currentChanging или другой способ достижения нужного мне поведения?

Ответы [ 3 ]

5 голосов
/ 28 августа 2015

В моем случае я подключаю СИГНАЛ и СЛОТ так:

//check if user clicked at a tab
connect(ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabSelected()));

и в функции tabSelected() я проверяю текущий индекс вкладки:

void MainWindow::tabSelected(){
    if(ui->tabWidget->currentIndex()==0){

        // Do something here when user clicked at tab1

    }
    if(ui->tabWidget->currentIndex()==3){

        // Do something here when user clicked at tab4

    }
}
3 голосов
/ 16 декабря 2013

Вот как я это решил

void MainWindow::on_tabWidget_currentChanged(int index)
{
    if (lockTabs) ui->tabWidget->setCurrentIndex(lockedTab);
}

При нажатии кнопки я устанавливаю true для lockTabs и сохраняю индекс текущей вкладки в lockedTab (int). Независимо от того, на какой вкладке вы нажали, она просто вернет вас на заблокированную вкладку.

Я согласен с первым комментарием, что отключение вкладок - лучший способ. Это мое решение для отключения вкладок:

void MainWindow::lockTabs(int except){
    for (int i=0; i<ui->tabWidget->count(); i++) {
        if (i!=except) ui->tabWidget->setTabEnabled(i, false);
    }
}

void MainWindow::unlockTabs() {
    for (int i=0; i<ui->tabWidget->count(); i++) {
        ui->tabWidget->setTabEnabled(i, true);
    }
}
1 голос
/ 04 сентября 2015

В заголовке укажите:

QWidget *saveTab

Создайте подпрограмму tabChanged, имеющую слот для сигнала currentChanged(). Тогда:

void pkgName::tabChanged
//"ask your question"
if "bad reply"
  // This is where you'll "set back to your old tab"
  ui->tabWidget->setCurrentWidget(savedWidget)
end if
savedWidget = ui->tabWidget-> getCurrentWidget() 
// Process
...