当前位置:编程学习 > wap >>

activateWindow()不能激活窗口

一个窗口失去焦点以后不是应该调用raise();和activateWindow();就可以激活的吗?可是调用以后窗口就在那闪,要反复调几次才能让窗口获取鼠标焦点。
#ifndef WIDGET_H
#define WIDGET_H

#include <QGraphicsView>
#include <QtWidgets>

class Widget : public QGraphicsView
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);

private:
    void enterEvent(QEvent *);
    void leaveEvent(QEvent *);
    void wheelEvent(QWheelEvent *);

private:
    QGraphicsScene          *m_GraScene;
    QGraphicsRectItem       *m_EItem;
};

#endif // WIDGET_H

#include "widget.h"
#define ACTIVETIMES 100

Widget::Widget(QWidget *parent)
    : QGraphicsView(parent)
{
//    setFocusPolicy(Qt::StrongFocus);
//    setMouseTracking(true);
    setFixedSize(300, 300);
    setStyleSheet("background-color: green;");
    setWindowFlags(/*Qt::FramelessWindowHint | */Qt::Tool | Qt::WindowStaysOnTopHint);
    m_GraScene = new QGraphicsScene(this);
    setScene(m_GraScene);
    m_EItem = new QGraphicsRectItem(QRectF(50, 50, 200, 200), 0);
    m_GraScene->addItem(m_EItem);
}

void Widget::enterEvent(QEvent *)
{
    for(int i = 0; i < ACTIVETIMES; i++)
    {
        raise();
        activateWindow();
        show();
    }

    qDebug()<<"Im enter";
}

void Widget::leaveEvent(QEvent *)
{
    qDebug()<<"Im leave";
}

void Widget::wheelEvent(QWheelEvent *e)
{
    this->rotate(e->delta() / 5);
}

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

求易做图,怎么破>_< Qt 激活窗口 鼠标焦点 activateWindow --------------------编程问答-------------------- http://blog.csdn.net/rabinsong/article/details/8660783看看这个哦 --------------------编程问答--------------------
引用 1 楼 LazyDreamHunter 的回复:
http://blog.csdn.net/rabinsong/article/details/8660783看看这个哦

要用进程间通信吗@_@激活一个窗口这么复杂 --------------------编程问答-------------------- 没有,我只是给你一个激活窗口的例子,当然你可以通过其他方式激活哦,关键是showWindow的处理 --------------------编程问答--------------------
引用 3 楼 LazyDreamHunter 的回复:
没有,我只是给你一个激活窗口的例子,当然你可以通过其他方式激活哦,关键是showWindow的处理
showWindow?是指要hide一下重新show出来才行吗? --------------------编程问答-------------------- 嗯,我是用这种方法来的,不这样做不行 --------------------编程问答--------------------
引用 5 楼 LazyDreamHunter 的回复:
嗯,我是用这种方法来的,不这样做不行
嗯嗯,但是会界面会闪一下。很不友好的感觉。 --------------------编程问答-------------------- setGeometry(curGemRect); 通过该种方法试试,预先保存你的上一个窗口位置 --------------------编程问答--------------------
引用 7 楼 LazyDreamHunter 的回复:
setGeometry(curGemRect); 通过该种方法试试,预先保存你的上一个窗口位置
好吧,还是感觉有时候能激活,有时候不行呢@_@都想死了。 --------------------编程问答-------------------- 使用这样的方法,

hide();
setGeometry();
show();

这个肯定行,也解决了闪 --------------------编程问答--------------------
引用 9 楼 LazyDreamHunter 的回复:
使用这样的方法,

hide();
setGeometry();
show();

这个肯定行,也解决了闪
还是会闪一下啦。毕竟hide了然后再show。我考虑是不是用钩子来做好了。 --------------------编程问答-------------------- 你是说你的m_GraScene = new QGraphicsScene(this);
    setScene(m_GraScene);

场景里的元素会闪吗
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,