読者です 読者をやめる 読者になる 読者になる

めいくりぷとのブログ

技術的なことやゲームのことやら・・・

ウィンドウフレームを消して、ウィンドウを移動出来るようにする。

eventFilter(QObject* object, QEvent* event); をオーバーライドし、
event->type() から各マウスの状態から制御します。以下ソースコードです。

CMainWindow::CMainWindow(__in QWidget *parent) : QMainWindow(parent)
{
    ....
    this->installEventFilter(this);                 // eventFilterを有効にする
    this->setWindowFlags(Qt::FramelessWindowHint);  // ウィンドウの枠?を消す
    ....
}
 
bool CMainWindow::eventFilter(QObject* object, QEvent* event)
{
    if (this->m_mousePressed)
    {
        if (event->type() == QEvent::MouseMove)
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
            this->m_currentPos = mouseEvent->pos();
            this->move(
                this->pos().x() + this->m_currentPos.x() - this->m_originPos.x(),
                this->pos().y() + this->m_currentPos.y() - this->m_originPos.y());
        }
 
        if (event->type() == QEvent::MouseButtonRelease)
        {
            this->m_mousePressed = false;
        }
    }
    else
    {
        if (event->type() == QEvent::MouseButtonPress)
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
            this->m_originPos = mouseEvent->pos();
            this->m_mousePressed = true;
        }
    }
 
    return false;
}