Qt实现QTreeView的index Clicked事件

yuan1024 发布于 2013/05/11 16:13
阅读 4K+
收藏 0
Qt

重新实现了QSplitter, 给这个控件添加了一个QListView和QTreeView,把QSplitter作为   QMainWindow的CentralWidget;

现在实现一个类似于资源管理器的界面,单击左边的QTreeView 的item可以实现QListView的内容更新,重新实现了QSplitter的mousePressEvent事件,但是实际运行时不会响应该事件。上代码:

CentralWidget::CentralWidget()
{
     fileTree = new QTreeView();
     listView = new QListView();


     QDirModel  *model;
     model = new QDirModel();
     model->setFilter(QDir::Dirs | QDir::Drives | QDir::Files);
     fileTree->setModel(model);
     listView->setModel(model);


     fileTree->setAnimated(true);
     fileTree->setIndentation(20);
     fileTree->setSortingEnabled(true);
     fileTree->setHeaderHidden(true);
     fileTree->setColumnHidden(1,true);
     fileTree->setColumnHidden(2,true);
     fileTree->setColumnHidden(3,true);
     fileTree->header()->setResizeMode(QHeaderView::ResizeToContents);
     fileTree->header()->setStretchLastSection(false);


     addWidget(fileTree);
     addWidget(listView);


     connect(fileTree->horizontalScrollBar(), SIGNAL(valueChanged(int)), this,SLOT(scrollbarchange(int)));
     connect(this,SIGNAL(clicked(QModelIndex *)),this,SLOT(on_treeWidget_itemClicked(QModelIndex *)));


}

void CentralWidget::mousePressEvent(QMouseEvent *event)
{
    QMessageBox::about(NULL,"error" ,tr("ERROR info555555"));
    QModelIndex indexClicked = fileTree->indexAt(event->pos());
    if( indexClicked.isValid() )
    {
        QMessageBox::about(NULL,"error" ,tr("ERROR info44444"));
        QRect vrect = fileTree->visualRect(indexClicked);
        int itemIndentation = vrect.x() - fileTree->visualRect(fileTree->rootIndex()).x();
        QRect rect = QRect(fileTree->header()->sectionViewportPosition(0) + itemIndentation, vrect.y(),
                           style()->pixelMetric(QStyle::PM_IndicatorWidth), vrect.height());
        if( rect.contains(event->pos()) )
        {
            QMessageBox::about(NULL,"error" ,tr("ERROR info333333333"));
            QStandardItem *item = ((QStandardItemModel*)fileTree->model())->itemFromIndex(indexClicked);
            if( item->checkState()==Qt::Unchecked )
            {
                mark_subitem(indexClicked);
            }
            else
            {
                unmark_subitem(indexClicked);
            }
            QMessageBox::about(NULL,"error" ,tr("ERROR info11111"));
            emit clicked(&indexClicked);
            mousePressEvent(event);
            return;
        }
        else
        {
            QMessageBox::about(NULL,"error" ,tr("ERROR info222222"));
            emit clicked(&indexClicked);
            mousePressEvent(event);
        }
    }
}
求解中………………

加载中
0
N
NeverDizzy

connect(this,SIGNAL(clicked(QModelIndex *)),this,SLOT(on_treeWidget_itemClicked(QModelIndex *)));

确定这信号槽没问题?发送者
 

返回顶部
顶部