我的程序使用了一個名爲「grip」(它的對象名)的標籤旁邊的其他小部件組成的ui-form-file。 當我運行代碼時,我看到代碼行grip was not detected
,我想知道爲什麼鼠標點擊標籤時無法識別。我還定義了一個mousePressEvent(QMouseEvent *event)
,如果我點擊該標籤,它就會按預期工作。Qt eventfilter沒有檢測到objectName
bool Note::eventFilter(QObject *target, QEvent *event)
{
if (event->type()==QEvent::MouseButtonPress){
qDebug() << "in Note::eventFilter" << endl;
if (target->objectName()=="grip")
{
lastClicked="grip";
qDebug() << "lastClicked == grip" << endl;
}
else
qDebug() << "grip was not detected" << endl;
}
return false;
}
什麼可能是一個target->objectName()=="grip"
原因是假的,如果我點擊這個目標,它被稱爲「抓地」?
編輯:那是怎麼我的事件函數定義:
void Note::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
qDebug() << "Left mouse button click detected";
...
主要事件過濾器被初始化的注意的構造函數:
Note::Note(std::vector<Note *> *nListIn){
qDebug() << "in Note::Note()" << endl;
ui.setupUi(this);
installEventFilter(this);
setWindowFlags(Qt::FramelessWindowHint);
this->show(); //must be after the Qt::FramelessWindowHint
nList = nListIn;
nList->push_back(this);
qDebug() << "Size of nList (aka noteList)" << nList->size() << endl;
}
編輯2:發現了一些說明,也許這是原因?
如果您的小部件只包含子小部件,您可能不需要 來實現任何事件處理程序。如果您想檢測鼠標,請在子部件中單擊 ,調用 部件的mousePressEvent()中的子部件的underMouse()函數。
更改日誌:'qDebug()<<「握未檢測到「<< target-> objectName();'查看調用事件過濾器的對象名稱。 ('endl'不需要,它總是附加在'qDebug'的情況下)。 –
啊,聰明而且非常有用。它說「注意」,即標籤所包含的整個主要部件的名稱。你知道什麼,如果我可能不得不在QtDesigner中更改? – user2366975
如果你使用'eventFilter',爲什麼你還要定義'mousePressEvent'呢?顯示你的'installEventFilter'調用。 –