2013-06-11 31 views
1

我有一個使用垂直了QSplitter分離兩種重要的構件的一類(箭頭指針是在分離器的位置):當檢測了QSplitter子插件已摺疊

enter image description here

上部子構件是一QTextEdit,而較低的孩子是一個自定義小部件,與我的應用程序的標記系統進行交互。較低的孩子默認會崩潰;它僅在用戶單擊標籤工具欄按鈕或向上拖動分離器時纔會顯示。當按鈕打開時,顯示較低的孩子,否則它將保持隱藏狀態。

工具欄按鈕可以很好地工作,但是現在我無法檢測用戶何時通過將分隔欄一直向下拖動來摺疊較低的孩子。這會導致工具欄按鈕在用戶手動摺疊下面的孩子時保持切換。反過來也是如此;當用戶拖動分離器時,按鈕保持關閉狀態。

我已經嘗試將QSplitter:splitterMoved(int pos,int index)信號連接到插槽,該插槽可在手動摺疊較低子項(索引1)時摺疊按鈕(位置0),但由於某些原因信號永遠不會發射。

我的代碼(拆分對象被稱爲鴻溝)連接該信號...

connect(divide, SIGNAL(splitterMoved(int,int)), this, SLOT(splitterMoved(int pos, int index))); 

...該廣告位:

void Editor::splitterMoved(int pos, int index){ 

    using namespace std; 

    if((index==1) && (pos==0)){ 
     ui->TagButton->setChecked(false); 
    } 
    else{ 
     ui->TagButton->setChecked(true); 
    } 
} 

我使用這個錯誤?無論我對分離器做什麼,插槽當前都不會做任何事情。有沒有更好的方法來解決這個問題?

回答

2

您確定參數名稱在SLOT宏中是否被允許?一個快速測試表明他們不是。

嘗試:

connect(divide, SIGNAL(splitterMoved(int,int)), 
     this, SLOT(splitterMoved(int,int))); 

UPDATE: 另一點是,pos不爲0時,子部件#1處於摺疊狀態,反之則達到最大值,因爲它是從距離最佳。測試QSplitter:sizes()會更容易。

例子,假設divide是類成員:

void Editor::splitterMoved(int pos, int index){ 
    if(divide->sizes().at(1)==0) { 
     ui->TagButton->setChecked(false); 
    } 
    else{ 
     ui->TagButton->setChecked(true); 
    } 
+0

我只是去嘗試...它仍然打破。 –

+0

@Will:該插槽適用於我,但不適用於'pos == 0'。看我的編輯。 –

+0

現在有效。謝謝! –