Sto utilizzando un QTabWidget
e ho bisogno di un modo per gestire il cambiamento della scheda corrente prima che accada realmente, e possibilmente cancellarlo se sono soddisfatte determinate condizioni. Il segnale QTabWidget::currentChanged
viene ricevuto dopo che la scheda corrente è cambiata, ma esiste un segnale QTabWidget::currentChanging
o un altro modo per ottenere il comportamento di cui ho bisogno?Come identificare quando la scheda corrente sta cambiando in un QTabWidget?
7
A
risposta
3
Ecco come ho risolto
void MainWindow::on_tabWidget_currentChanged(int index)
{
if (lockTabs) ui->tabWidget->setCurrentIndex(lockedTab);
}
Su clic di un pulsante, ho impostato lockTabs alla vera e salvare l'indice scheda corrente a lockedTab (int). Indipendentemente dalla scheda su cui fai clic, ti rimanderò alla scheda bloccata.
Sono d'accordo con il primo commento che la disattivazione delle schede è il modo migliore. Questa è la mia soluzione per schede invalidanti:
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);
}
}
5
Nel mio caso, mi collego SEGNALE e SLOT come questo:
//check if user clicked at a tab
connect(ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabSelected()));
e in tabSelected()
funzione, controllo corrente Indice Tab:
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
}
}
1
Nella propria intestazione, dichiarare:
QWidget *saveTab
Creare una routine tabChanged
avere lo slot per il segnale currentChanged()
. Quindi:
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
Problemi correlati
- 1. Come disabilitare una scheda in un QTabWidget?
- 2. Un modo per identificare la scheda del browser in JavaScript?
- 3. $ state.go non sta cambiando l'Url
- 4. MKMapView maptype non sta cambiando?
- 5. La dimensione di una struttura sta cambiando in C#?
- 6. Sta cambiando un puntatore considerato un'azione atomica in C?
- 7. Come inserire uno spazio tra due schede in un QTabWidget?
- 8. Perché la directory di lavoro sta cambiando quando si esegue Invoke-sqlcmd?
- 9. Come impostare la scheda corrente in viewpager con tablayout
- 10. Chiudi scheda corrente
- 11. Identificare i segmenti quando una persona sta parlando?
- 12. cambiando la struttura git
- 13. L'orientamento delle foto catturate sta cambiando in Android
- 14. Ottieni la scheda attiva corrente tramite JS.
- 15. GitHub: la mia forcella verrà aggiornata quando il master sta cambiando?
- 16. Perché strtok sta cambiando il suo input in questo modo?
- 17. UITableViewCell altezza non sta cambiando in UITableView quando si cambia in Interface Builder
- 18. Context.User sta cambiando in null stranamente su Signalr
- 19. Prevenzione dello scorrimento quando si utilizza l'hash dell'URI per identificare la scheda
- 20. Come identificare la prima iterazione in un ciclo for..in
- 21. QTabBar vs QTabWidget
- 22. Emulator dimensione della memoria interna sta cambiando automaticamente a 384MB
- 23. Estensione Chrome: ottieni la scheda corrente dal popup
- 24. Identificare univocamente un computer
- 25. Perché Visual C++ sta cambiando il nome del mio metodo?
- 26. Git sta cambiando le autorizzazioni del mio file quando spingo al server
- 27. Perché git-svn sta cambiando casualmente la mia directory principale in quella principale?
- 28. Come identificare quando viene disinstallata l'app
- 29. UIView cambiando la sua posizione in swift
- 30. Come identificare UNICAMENTE un dispositivo USB?
Non credo che ci sia un tale aggancio ... dovresti tornare indietro manualmente. Ma questa non sembra una buona scelta dell'interfaccia utente. Perché non vorresti che lo stato di abilitazione della scheda riflettesse la sua disponibilità invece di provare a "rifiutare" un clic su una scheda dall'aspetto valido? http://doc.qt.nokia.com/latest/qtabwidget.html#setTabEnabled – HostileFork
Sarebbe possibile creare sottoclasse QTabWidget? Non ho fatto alcuna ricerca in merito; è solo un'idea. –
Abbiamo avuto esattamente questo problema e alla fine abbiamo scelto di scrivere una TabWidget personalizzata da zero che ha prodotto un segnale che cambiava e ha permesso agli oggetti di porre il veto alle modifiche proposte. Detto questo, avrei scelto di utilizzare il metodo proposto da @HostileFork se fosse stata un'opzione. – sjwarner