2011-11-29 5 views
7

मैं QTabWidget का उपयोग कर रहा हूं और मुझे वास्तव में होने से पहले वर्तमान टैब के परिवर्तन को संभालने का एक तरीका चाहिए, और कुछ शर्तों को पूरा होने पर संभावित रूप से इसे रद्द कर दें। वर्तमान टैब बदल जाने के बाद QTabWidget::currentChanged संकेत प्राप्त हुआ है, लेकिन क्या मुझे QTabWidget::currentChanging सिग्नल या व्यवहार की आवश्यकता के लिए एक और तरीका है?QTabWidget में वर्तमान टैब कब बदल रहा है इसकी पहचान कैसे करें?

+4

मुझे विश्वास नहीं है कि ऐसा हुक है ... आपको मैन्युअल रूप से वापस फ़्लिप करना होगा। लेकिन यह एक बहुत अच्छी यूजर इंटरफेस पसंद की तरह नहीं लगता है। वैध टैब देखने वाले टैब पर क्लिक को "अस्वीकार करने" की कोशिश करने के बजाय आप टैब की सक्षमता स्थिति को अपनी उपलब्धता को क्यों नहीं दिखाएंगे? http://doc.qt.nokia.com/latest/qtabwidget.html#setTabEnabled – HostileFork

+0

क्या QTabWidget को उपclass करना संभव होगा? मैंने इस मामले पर कोई शोध नहीं किया है; यह सिर्फ एक विचार है। –

+0

हमारे पास वास्तव में यह समस्या थी और आखिरकार स्क्रैच से एक कस्टम टैबविड्ज लिखना चुना जिसने एक परिवर्तन के बारे में संकेत दिया और वस्तुओं को प्रस्तावित परिवर्तनों को वीटो करने की इजाजत दी। यह कहकर कि मैंने @ होस्टाइलफ़ोर द्वारा प्रस्तावित विधि का उपयोग करना चुना होगा यदि वह एक विकल्प था। – sjwarner

उत्तर

3

यह मैं इसे कैसे

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

हल एक बटन पर क्लिक करने पर है, मैं सत्य पर 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); 
    } 
} 
5

मेरे मामले में, मैं इस तरह सिग्नल और स्लॉट कनेक्ट:

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 

    } 
} 
:

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

और tabSelected() समारोह में, मैं वर्तमान टैब अनुक्रमणिका जाँच

1

अपने शीर्षलेख में, घोषित करें:

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 
संबंधित मुद्दे