2012-03-07 102 views
0

我有一个简单的Qt应用程序,它具有一个继承QTreeWidget的mainwindow和一个类(TreeView)。子窗口小部件鼠标事件

我似乎无法为treewidget启用鼠标事件。带有工具栏和菜单栏的主窗口可以正常工作,但我无法点击treeWidget中的任何项目。

我已将QMouseEvent包含在我的课程中并实施了虚拟功能。这里举一个例子:

void TreeView::itemDoubleClicked(QTreeWidgetItem *item, int column) 
{ 
    QMessageBox::information(this, "Message", item->text(column)); 
} 

我在这里丢失了一些明显的东西吗?

编辑: 我TreeView.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); 
}; 

构造函数:

TreeView::TreeView(QWidget *parent): QTreeWidget(parent) 
{ 
    this->setHeaderLabel("Images"); 
    this->setEnabled(true); 
} 

编辑:

我有固定什么@webclectic指出,但目前还没有固定的问题。

是否有可能阻止了treeWidget中的所有mouseEvent? 我可以通过键盘遍历它们,但鼠标不起作用。

编辑:

我有一个主窗口。该主窗口有一个指向控制器类的指针。控制器类拥有主窗口中使用的所有小部件的实例,包括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()))); 

} 

吉斯利

+0

可以提供一些更多的细节.... – shofee 2012-03-07 13:12:34

+0

@shobi增加了我的.h文件和构造函数 – Gisli 2012-03-07 13:16:30

+1

你看到了webclectic的答案,试试吧...... – shofee 2012-03-07 13:19:39

回答

0

所以,我终于找到了答案,这是一个愚蠢的错误。在主窗口中构造我创建的小部件的情况下,之前我所做的:

ui->setupUi(this); 

所以我搬到这条线的构造顶部和一切工作。这在Qt中可能是一个基本的东西,但由于某种原因我错过了它。

1

itemDoubleClicked是一个信号,而不是槽。你需要做的是将它连接到一个插槽,你将拥有自定义代码。

在主窗口的构造

// 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)); 
} 
+0

谢谢你。但这并没有做到这一点。点击小部件中的任何项目仍然是不可能的。 – Gisli 2012-03-07 13:24:03

相关问题