我正在實現一個類,繼承QTreeWidget, 我只是試圖做一些事情,只有當用戶左鍵點擊一個項目。 由於itemDoubleClicked只給你的項目,而不是鼠標事件, 和mouseDoubleClickEvent只給你沒有項目的鼠標事件, 所以我想我會在類中添加一個成員,並記錄在mouseDoubleClickEvent中是否按下了左或右按鈕, 然後在進入連接到信號itemDoubleClicked的插槽時檢查該信息。 也就是說,如果信號是在事件處理程序之後發出的。我打算試驗這是否屬實,但後來我遇到了這個問題。 好了,回類,它看起來是這樣的:itemDoubleClicked信號沒有發射時,實施mouseDoubleClickEvent
class myTreeWidget : public QTreeWidget{
Q_OBJECT
private:
Qt::MouseButton m_button;
public:
myTreeWidget(QWidget* parent):QTreeWidget(parent){
m_button = Qt::NoButton;
connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)),
this, SLOT(slot_doubleClick(QTreeWidgetItem*,int)));
}
void mouseDoubleClickEvent(QMouseEvent* event){
m_button = event->button();
}
public slots:
void slot_doubleClick(QTreeWidgetItem* item, int column);
signals:
void itemDoubleClicked(QTreeWidgetItem* item, int column);
}
沒錯,是這樣的。 然後我使用gdb檢查哪個被調用第一個, mouseDoubleClickEvent或slot_doubleClick, ,事實證明,根本沒有調用slot_doubleClick。 我註釋掉了mouseDoubleClickEvent並重試, 和slot_doubleClick被調用。
所以嗯...我在這裏問的是... 這是Qt的限制嗎? 我只能在信號&插槽和事件處理程序之間選擇一個嗎? 或者我只是做錯了嗎?
此外,如果這是一個限制, 你可以推薦另一個解決方案,我想要做什麼? (只響應左鍵雙擊)
對不起,對這篇長文章感謝!
Arrrrrgh !!謝謝!! OMG現在感覺如此遲鈍... – nancyheidilee