2011-06-08 54 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