Qt 子窗口小部件鼠标事件
我有一个简单的Qt应用程序,它有一个主窗口和一个继承QTreeWidget的类(TreeView) 我似乎无法为treewidget启用鼠标事件。带有工具栏和菜单栏的主窗口工作正常,但我无法单击树状图中的任何项目 我已经在我的类中包含了QMouseEvent并实现了虚拟函数。以下是一个示例:Qt 子窗口小部件鼠标事件,qt,Qt,我有一个简单的Qt应用程序,它有一个主窗口和一个继承QTreeWidget的类(TreeView) 我似乎无法为treewidget启用鼠标事件。带有工具栏和菜单栏的主窗口工作正常,但我无法单击树状图中的任何项目 我已经在我的类中包含了QMouseEvent并实现了虚拟函数。以下是一个示例: void TreeView::itemDoubleClicked(QTreeWidgetItem *item, int column) { QMessageBox::information(this
void TreeView::itemDoubleClicked(QTreeWidgetItem *item, int column)
{
QMessageBox::information(this, "Message", item->text(column));
}
我是不是漏掉了什么明显的东西
编辑:
我的树视图。h:
#include <vector>
#include <algorithm>
#include <QTreeWidget>
#include <QMouseEvent>
//ObjectCube includes
#include <Hub.h>
#include <TagSet/TagSet.h>
#include <Tag/Tag.h>
#include "tagsettree.h"
#include "tagtree.h"
using namespace ObjectCube;
class TreeView: public QTreeWidget
{
Q_OBJECT
public:
TreeView(QWidget *parent);
void buildTree(Hub *hub);
void buildEachTagSetTree(TagSetTree *parent);
void addHierarchiesToTree(QTreeWidgetItem *parent, TagSet *tagSet);
void itemDoubleClicked (QTreeWidgetItem *item, int column);
};
编辑:
我已经修复了@weblectic指出的问题,但还没有修复该问题
有没有可能我已经阻止了树梢上的所有鼠标事件?
我可以用键盘反复浏览它们,但鼠标不起作用
编辑:
我有一个主窗口。该主窗口有一个指向控制器类的指针。控制器类拥有主窗口中使用的所有小部件的实例,包括TreeWidget。主窗口是控制器及其内部所有小部件的父窗口。代码:
//Constructor
MainController::MainController(QWidget *parent, Hub *hub): QWidget(parent)
{
this->hub = hub;
initializeController(parent);
}
void MainController::initializeController(QWidget *main)
{
treeView = new TreeView(main);
glWidget = new GLWidget(main);
listWidget = new ListWidget(main);
rightSide = new QVBoxLayout(main);
treeView->buildTree(hub);
treeView->move(0, 55);
treeView->resize(main->frameGeometry().width() * 0.2, main->frameGeometry().height() *0.91);
glWidget->move(main->frameGeometry().width() * 0.32 ,55);
glWidget->resize(main->frameGeometry().width() * 0.67, main->frameGeometry().height() *0.91);
rightSide->addWidget(listWidget);
rightSide->setGeometry(QRect(QPoint(main->geometry().width() -20 , 55), QPoint(main->geometry().width(),main->geometry().height())));
}
Gísli是一个信号,而不是插槽。您需要做的是将它连接到一个插槽,在那里您将有您的自定义代码
在主窗口的构造函数中
// pTreeView is a pointer to the TreeView widget
connect(pTreeView, SIGNAL(itemDoubleClicked ( QTreeWidgetItem *, int),
this, SLOT(mySlot(QTreeWidgetItem*, int)));
然后在您的插槽中:
void TreeView::mySlot(QTreeWidgetItem *item, int column)
{
QMessageBox::information(this, "Message", item->text(column));
}
所以我终于找到了答案,这是一个愚蠢的错误。在主窗口构造函数中,我先创建了小部件的实例:
ui->setupUi(this);
所以我把这行移到了构造器的顶部,一切都正常了。这可能是Qt中的一个基本问题,但我出于某种原因错过了它。你能提供更多细节吗?@shobi添加了我的.h文件和构造函数你看到了Weblectic的答案了吗,试试看……如果你添加了
QTreeWidget
而不是你的类,会发生什么?您还可以重新实现MousePresseEvent()或mouseDoubleClickEvent(),并在其中添加qDebug消息,以查看发生了什么。尝试创建一个问题仍然存在的最小示例,您将发现问题所在…另外,告诉您如何将小部件添加到主窗口可能会很有趣。谢谢。但这并没有奏效。仍然无法单击小部件中的任何项目。
ui->setupUi(this);