找回密码
 立即注册
收起左侧

QGraphicsView焦点问题,拖拽问题,窗口切分问题

2
回复
6513
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2015-1-8 22:55:29 显示全部楼层 |阅读模式
本帖最后由 bevod117 于 2015-1-9 11:22 编辑

问题一:QGraphicsView 焦点问题
MyGraphicsView::focusOutEvent(QFocusEvent *event)导致this->setSelected(true);失效了 this是QGraphicsItem
问题描述:,右键点击创景的中item,item处于选择状态,并弹出菜单,然后item就会变颜色,功能已实现,然后我想添加一个功能,就是点击QGraphicsView以外的部分,如果创景中有处于选择状态的item就会失去选择状态,通过view的focusOutEvent事件完成,但是导致右键操作出现问题,右击item不在处于选择状态(item没有变颜色),this->setSelected(true);失效了,右键菜单正常弹出,这不是个很大的bug,但是不了解是怎么回事,求大神指定,下面贴部分代码
Room继承自QGraphicsItem。
  1. void Room::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
  2. {
  3.         this->setSelected(true);
  4.         m_menu->exec(event->screenPos());
  5.         event->accept();
复制代码
  1. void MyGraphicsView::focusOutEvent(QFocusEvent *event)
  2. {
  3.       //  this->scene()->clearFocus();
  4.     QList<QGraphicsItem*> list = this->scene()->selectedItems();
  5.     for(int i=0;i<list.size();i++)
  6.     {
  7.         Room *room = static_cast<Room*>(list.at(i));
  8.         room->setSelected(false);
  9.     }
  10.     event->accept();
  11.         //this->scene()->clearSelection();
  12.     //  QGraphicsView::focusOutEvent(event);
  13. }
复制代码
//////////////////////////////////////////////////////////////////////////////////////////////
问题二:实现从QGraphicsView拖拽到QListView
描述:拖拽数据如果是int,QString,正常,如果数据是QList<xxx>或QStringList,接收到的数据转换成链表后是空链表
贴代码
  1. void MyGraphicsView::mouseMoveEvent(QMouseEvent *event)
  2. {
  3.     if(m_pressed)
  4.     {
  5.     int distance = (event->pos() - m_startPos).manhattanLength();
  6.     if(distance >= QApplication::startDragDistance())
  7.     {
  8.         QStringList nameList ;
  9.         for(int i= 0;i<list.size();i++)
  10.         {
  11.             nameList.append(roomlist.at(i)->roomNumber());
  12.        }
  13.         QMimeData *mimeData = new QMimeData;
  14.         QVariant var;
  15.         //     var.setValue(nameList);
  16.         //     int x= 100;
  17.         //QString x= "123";
  18.        var.setValue(nameList);

  19.         mimeData->setData("view/list",var.toByteArray());
  20.         QDrag *drag = new QDrag(this);
  21.         drag->setMimeData(mimeData);
  22.         drag->setPixmap(QPixmap(":/image/room.png"));
  23.         if(drag->exec(Qt::MoveAction) == Qt::MoveAction);
  24.     }
  25.   }  QGraphicsView::mouseMoveEvent(event);
  26. }
复制代码
下面贴drop事件函数
         
  1. void MyListView::dropEvent(QDropEvent *event)
  2. {
  3.     MyGraphicsView *source = qobject_cast<MyGraphicsView *>(event->source());
  4.     if(source)
  5.     {
  6.         if(event->mimeData()->hasFormat("view/list"))
  7.         {
  8.             QByteArray array = event->mimeData()->data("view/list");
  9.             QVariant variant = QVariant(array);
  10.             QStringList res = variant.toStringList();
  11.             QString str;
  12.             //            int n = variant.toInt();
  13.             //           qDebug() << n;
  14.             //            QString str = variant.toString();
  15.             //            QStandardItem *item = new QStandardItem(str);
  16.             //                      m_model->appendRow(item);
  17.             event->setDropAction(Qt::MoveAction);
  18.             event->accept();
  19.         }
  20.     }
  21.     // QListView::dropEvent(event);
  22. }
复制代码
/////////////////////////////////////////////////////////////////////////////////////
问题3:窗口切分比例不能控制一个切分对象添加两个对象(一个是普通的Widget,一个是QStackedWidget)
rightSplitter->addWidget(m_stackedWidget);    rightSplitter->addWidget(widget);QStackedWidget在没有添加widget的时候,这个时候m_stackedWidget的高度为0看不见,被widget挤压为0 了,
添加如下代码无效
    rightSplitter->setStretchFactor(0,6);  
    rightSplitter->setStretchFactor(1,4);
     然后删除掉下一句
    rightSplitter->setStretchFactor(1,4)
这时候以rightSplitter固定比例切分这个两个窗口,m_stackedWdigetye有一定高度,但是比例无法控制,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2015-1-8 23:02:54 显示全部楼层
哎,怎么一提交,代码怎么成这么鬼样子了,乱七八糟
回复 支持 反对

使用道具 举报

累计签到:882 天
连续签到:3 天
2015-1-9 09:24:55 显示全部楼层
你提交的时候要把代码放到 <> 这个里面,这样就不会乱了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了