|
本帖最后由 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。- void Room::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
- {
- this->setSelected(true);
- m_menu->exec(event->screenPos());
- event->accept();
复制代码- void MyGraphicsView::focusOutEvent(QFocusEvent *event)
- {
- // this->scene()->clearFocus();
- QList<QGraphicsItem*> list = this->scene()->selectedItems();
- for(int i=0;i<list.size();i++)
- {
- Room *room = static_cast<Room*>(list.at(i));
- room->setSelected(false);
- }
- event->accept();
- //this->scene()->clearSelection();
- // QGraphicsView::focusOutEvent(event);
- }
复制代码 //////////////////////////////////////////////////////////////////////////////////////////////
问题二:实现从QGraphicsView拖拽到QListView
描述:拖拽数据如果是int,QString,正常,如果数据是QList<xxx>或QStringList,接收到的数据转换成链表后是空链表
贴代码- void MyGraphicsView::mouseMoveEvent(QMouseEvent *event)
- {
- if(m_pressed)
- {
- int distance = (event->pos() - m_startPos).manhattanLength();
- if(distance >= QApplication::startDragDistance())
- {
- QStringList nameList ;
- for(int i= 0;i<list.size();i++)
- {
- nameList.append(roomlist.at(i)->roomNumber());
- }
- QMimeData *mimeData = new QMimeData;
- QVariant var;
- // var.setValue(nameList);
- // int x= 100;
- //QString x= "123";
- var.setValue(nameList);
- mimeData->setData("view/list",var.toByteArray());
- QDrag *drag = new QDrag(this);
- drag->setMimeData(mimeData);
- drag->setPixmap(QPixmap(":/image/room.png"));
- if(drag->exec(Qt::MoveAction) == Qt::MoveAction);
- }
- } QGraphicsView::mouseMoveEvent(event);
- }
复制代码 下面贴drop事件函数
- void MyListView::dropEvent(QDropEvent *event)
- {
- MyGraphicsView *source = qobject_cast<MyGraphicsView *>(event->source());
- if(source)
- {
- if(event->mimeData()->hasFormat("view/list"))
- {
- QByteArray array = event->mimeData()->data("view/list");
- QVariant variant = QVariant(array);
- QStringList res = variant.toStringList();
- QString str;
- // int n = variant.toInt();
- // qDebug() << n;
- // QString str = variant.toString();
- // QStandardItem *item = new QStandardItem(str);
- // m_model->appendRow(item);
- event->setDropAction(Qt::MoveAction);
- event->accept();
- }
- }
- // QListView::dropEvent(event);
- }
复制代码 /////////////////////////////////////////////////////////////////////////////////////
问题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
|