• 8762阅读
  • 4回复

[提问]qtreewidget和qtreeview能否设置树的级数? [复制链接]

上一主题 下一主题
离线uidab
 

只看楼主 倒序阅读 楼主  发表于: 2011-09-05
不知道描述对不对,能不能设置它们的级数,比如只有两层或只有一层??

还有如果只有一层如何象qtablewidget一样有ui->tableWidget->selectRow()操作?
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线jdwx

只看该作者 1楼 发表于: 2011-09-05
回 楼主(uidab) 的帖子
几层全看怎么添加item,任意。
要是就一层,可以考虑其它的控件QToolBox
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线uidab

只看该作者 2楼 发表于: 2011-09-05
回 1楼(jdwx) 的帖子
暂时一层,将来希望2层。所以现在就选择了tree
是不是说拖拽某一项加入到另外一项的时候,要进行判断,加入的是第几层,如果不是第一层和第二层,就放弃操作或者放到第二层?
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线ppdayz

只看该作者 3楼 发表于: 2011-09-06
回 2楼(uidab) 的帖子
子类化treewidget
然后重写
protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void dragEnterEvent(QDragEnterEvent *event);
    void dragMoveEvent(QDragMoveEvent *event);
    void dropEvent(QDropEvent *event);


最好在插入item的时候指定层数,比如
第一层可以item->setDate(0, Qt::userRole+1, 0);
第二层可以item->setDate(0, Qt::userRole+1, 1);


然后在dragMoveEvent的时候判断


  1. void myTreeWidget::dragMoveEvent(QDragMoveEvent *event)
  2. {
  3.          myTreeWidget *source =qobject_cast<myTreeWidget *>(event->source());
  4.          if(source && source->savedItem && desc ){
  5.              int src_data  = source->savedItem->data(0, Qt::userRole+1).toInt();
  6.              int desc_data = desc->data(0, Qt::userRole+1).toInt();
  7.              if(src_data >desc_data){
  8.                  return QTreeWidget::dragMoveEvent(event);
  9.              }else{
  10.                  event->ignore();
  11.             }
  12.         }
  13. }

差不多就这样,其他几个重写的就是做写判断什么的

离线uidab

只看该作者 4楼 发表于: 2011-09-06
回 3楼(ppdayz) 的帖子
谢谢啦,看来您用Qt也比较多啊。

看到drag事件,我想问个问题,GUI自动生成,继承Qmainwindow,上边放了几个常用的组件。设置某widget接收文件拖拽打开(现在很多软件都是),但是我设置mainWindow这个主体不接受拖拽。最后结果就是widget也不接受拖拽了。这是为什么??
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
快速回复
限100 字节
 
上一个 下一个