2014-10-11 16 views
4

這使我瘋狂。 QTabBar's documentation說:QTabBar的tabBarDoubleClicked(int)爲什麼不能雙擊標籤欄?

空隙QTabBar :: tabBarDoubleClicked(INT指數)信號]

這個信號被髮射時在索引標籤上的用戶雙擊。 index指向被點擊的選項卡,如果沒有選項卡在光標下則爲-1。

所以,當我雙擊標籤欄,不應該是返回-1

只是要清楚,紅色框中的位是我想要雙擊的位置,並且我認爲它應該返回-1。當我雙擊一個標籤時它返回標籤索引,所以我知道它工作正常。 ApplicationWindow

但是,不應該在紅色框中的位仍然在技術上是標籤欄?或者標籤欄是否隨標籤添加而展開?如果是這樣,是否有辦法讓它擴大到水平填充窗口?

我試圖實現在雙擊標籤欄上添加一個選項卡;還有另一種方法我應該去做這件事嗎?

回答

1

運行此代碼並添加一些欄。

void MainWindow::on_tabWidget_tabBarDoubleClicked(int index) 
{ 
    qDebug() << index << ui->tabWidget->tabBar()->geometry(); 
} 

你會看到這樣的事情:

0 QRect(0,0 288x29) 
2 QRect(0,0 288x29) 
("G:/x.txt", "G:/xx.txt", "") //something was added 
3 QRect(0,0 311x29) //width increased 
5 QRect(0,0 311x29) 
4 QRect(0,0 311x29) 

正如你現在寬度爲311x29。並嘗試使用此:

void MainWindow::on_tabWidget_tabBarDoubleClicked(int index) 
{ 
    ui->tabWidget->removeTab(index); 
    qDebug() << index << ui->tabWidget->tabBar()->geometry(); 
} 

結果可能是這樣的:

2 QRect(0,0 221x29) 
2 QRect(0,0 154x29) 
1 QRect(0,0 50x21) 
0 QRect(0,0 0x0) 

正如你所看到的,我刪除標籤和TabBar變小。 TabBar被自動調整大小。您在紅框區域不TabBar

要增加一些選項卡,可以提供特殊的按鈕,或者使用tabBarDoubleClicked信號太多,但使用count()方法要知道,多標籤如何在你的widget現在。

編輯:

例如:

void MainWindow::on_tabWidget_tabBarDoubleClicked(int index) 
{ 
    int height = ui->tabWidget->tabBar()->height(); 
    ui->tabWidget->tabBar()->setGeometry(0,0,ui->tabWidget->geometry().width(), height); 
    qDebug() << index << ui->tabWidget->tabBar()->geometry(); 
} 

當然,你應該setGeometry在另一個地方(在構造函數中也許),但我沒有這樣做更小的代碼。現在tabBar更大,但設計或其他方面沒有任何變化。結果:

2 QRect(0,0 311x29) 
1 QRect(0,0 311x29) 
-1 QRect(0,0 311x29) 
-1 QRect(0,0 311x29) 

正如你所看到的,-1出現在輸出端,當我在區域中單擊在沒有任何標籤(無setGeometry這只是空白區域),它的出現,讓知道你能抓住這個信號。當您的索引等於-1時,您可以創建新的選項卡(或打開一些對話框讓用戶進行一些設置)。我認爲這是你所需要的。

另一種方式:

QPushButton *m_addButton = new QPushButton("+", this); 
QPushButton *m_addButton1 = new QPushButton("-", this); 
m_addButton->resize(15,15); 
m_addButton1->resize(15,15); 
ui->tabWidget->tabBar()->setTabButton(0, QTabBar::RightSide, m_addButton); 
ui->tabWidget->tabBar()->setTabButton(0, QTabBar::LeftSide, m_addButton1); 

結果:

enter image description here

+0

好了,所以它絕對不是標籤欄的一部分。任何想法如何擴大標籤欄或其他方法來捕捉該地區的雙擊? – Thomas 2014-10-11 18:25:35

+0

@Thomas請看我的編輯。 – Chernobyl 2014-10-11 18:35:48

+0

好吧,我得知我將tabBar的寬度設置爲tabWidget的寬度,但我試圖找出實際上它在哪裏。如果我在構造函數中這樣做,那麼TabBar在添加選項卡時會調整大小,所以它不起作用。如果我在添加選項卡時執行此操作,它會正確設置尺寸,但我想它會再次被重置,因爲單擊空白區域將不會執行任何操作。如果我在收到雙擊時執行此操作,則只有在雙擊空白區之前雙擊某個選項卡時才能正常工作。你有沒有正常工作? – Thomas 2014-10-11 19:02:37