2017-09-11 2 views
1

親ウィンドウで最小化されたダイアログがあります。 frameGeometry()を呼び出すと、結果はアクティブなダイアログの(最小ではない)数値になります。最小化ダイアログのframeGeometry(titleBar)

私はtitleBarがどこにあるか知りたいと思います。

+0

あなたは、サンプルコードを与えることができますか? –

+0

@PhạmAnhTuấnこれは私の別の質問で書いたのと同じコードです:) mouseX:949 mouseY:375 --- frame:752 355 --- 内容:760 386 --- ヒットタイトルバー----- ------------------------------------------- mouseX:88マウスY:1025 --- フレーム:752 355 --- 内容:760 386 ---これは出力です。最初のものはアクティブなウィンドウの番号で、2番目は最小化されたものです。しかし、見ることができるように、フレームとコンテンツは最小化とアクティブの両方で同じです。 – RainMan14

+0

ああ、親のqwigetをどうやって最小化できますか?そして、最小化するときにタイトルバーを表示するにはどうすればいいですか? –

答えて

1

を(ダイアログの最小化だけ示すタイトルバー]ダイアログとき)あなたが試すことができ、この

ヘッダファイル

#ifndef MYDIALOG_H 
#define MYDIALOG_H 

#include <QtWidgets/QDialog> 
#include <QtWidgets/qmainwindow.h> 
class MyDialog : public QDialog 
{ 
    Q_OBJECT 

public: 
    MyDialog(QWidget *parent = 0); 
    ~MyDialog(); 

protected: 
    virtual bool nativeEvent(const QByteArray & eventType, void * message, long * result); 

}; 

class MyWindow : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    MyWindow(); 
    ~MyWindow(); 

private: 
    MyDialog * m_dialog; 

}; 

#endif // MYDIALOG_H 

ソースファイル

#include "mydialog.h" 
#include <windows.h> 
#include <windowsx.h> 
#include <QDebug> 
#include <QTimer> 
MyDialog::MyDialog(QWidget *parent) 
    : QDialog(parent) 
{ 
    setStyleSheet("QDialog{background-color: red}"); 
} 

MyDialog::~MyDialog() 
{ 

} 

bool MyDialog::nativeEvent(const QByteArray & eventType, void * message, long * result) 
{ 
    MSG* msg = (MSG*)(message); 
    if (msg->message == WM_NCLBUTTONDOWN) 
    { 
     if (isMinimized()) 
     { 
      QTimer::singleShot(50, this, SLOT(showNormal())); 
      *result = 0; 
      return true; 
     } 
     else 
     { 
      int mouseX = GET_X_LPARAM(msg->lParam); 
      int mouseY = GET_Y_LPARAM(msg->lParam); 

      QRect frame = frameGeometry(); 
      QRect content = geometry(); 

      qDebug() << "frame: " << frame; 
      qDebug() << "content: " << content; 

      if (mouseY < content.y() && mouseY >= frame.y()) 
      { 
       qDebug() << "Hit title bar"; 
       showMinimized(); 
      } 
     } 
    } 

    *result = 0; 
    return false; 
} 

MyWindow::MyWindow() 
    :QMainWindow() 
{ 
    setStyleSheet("QMainWindow{background-color: blue}"); 
    showMaximized(); 
    m_dialog = new MyDialog(this); 
    m_dialog->showMinimized(); 
} 

MyWindow::~MyWindow() 
{ 
}