2011-06-08 55 views
2

我目前正在研究用於各種應用的基本QTGui表。我想要的一個功能是能夠雙擊列標題並調用排序功能。我一直在網上查看文檔和各種帖子,但我並沒有完全理解整體思路。我知道我需要將doubleClicked信號連接到我的handleDoubleClick插槽,但它並不真正起作用。問題理解和處理QHeaderView信號

許多示例都提到創建自己的自定義類以及如何爲該類設置信號,但是當QHeaderView已經內置信號時,是否需要這樣做?有沒有辦法將內置信號連接到我的插槽?

這裏基本上是我所擁有的。

QHeaderView *headerView = mainTable->horizontalHeader(); 
headerView->setMovable(true); 
headerView->setClickable(true); 

QObject::connect(headerView, SIGNAL(sectionDoubleClicked()), headerView, SLOT(sortByHeader())); 

void sortByHeader() 
{ 
    cout << "Double clicked"; 
} 

解決: 阿濟斯的方法有效,但事實證明,我還需要傳遞參數的類型。所以這是一個語法錯誤。

所以它是這樣的

Class1* myclass = new Class1(); 
QObject::connect(headerView, SIGNAL(sectionDoubleClicked(int)), myclass, SLOT(sortByHeader(int))); 

回答

0
QObject::connect(headerView, SIGNAL(sectionDoubleClicked()), headerView, SLOT(sortByHeader())); 

你問的連接方法將doubleclickedsignal連接到一個名爲sortByHeader屬於QHeaderview類插槽。因此它不會呼叫您的插槽。如果您已經定義了一個名爲Class1自己的類的sortByHeader()插槽,那麼你應該這樣做,

Class1* myclass = new Class1(); 
QObject::connect(headerView, SIGNAL(sectionDoubleClicked()), myclass, SLOT(sortByHeader())); 
+0

我試過了,但仍沒有運氣。 – Geeklat 2011-06-08 14:38:20

+1

啊。原來我也需要傳遞參數類型 QObject :: connect(headerView,SIGNAL(sectionDoubleClicked(int)),myclass,SLOT(sortByHeader(int))); – Geeklat 2011-06-08 14:55:33

+0

線索實際上是從參考中複製粘貼:) – swdev 2014-06-12 20:35:07