1
親ウィンドウで最小化されたダイアログがあります。 frameGeometry()を呼び出すと、結果はアクティブなダイアログの(最小ではない)数値になります。最小化ダイアログのframeGeometry(titleBar)
私はtitleBarがどこにあるか知りたいと思います。
親ウィンドウで最小化されたダイアログがあります。 frameGeometry()を呼び出すと、結果はアクティブなダイアログの(最小ではない)数値になります。最小化ダイアログのframeGeometry(titleBar)
私はtitleBarがどこにあるか知りたいと思います。
を(ダイアログの最小化だけ示すタイトルバー]ダイアログとき)あなたが試すことができ、この
ヘッダファイル
#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()
{
}
あなたは、サンプルコードを与えることができますか? –
@PhạmAnhTuấnこれは私の別の質問で書いたのと同じコードです:) mouseX:949 mouseY:375 --- frame:752 355 --- 内容:760 386 --- ヒットタイトルバー----- ------------------------------------------- mouseX:88マウスY:1025 --- フレーム:752 355 --- 内容:760 386 ---これは出力です。最初のものはアクティブなウィンドウの番号で、2番目は最小化されたものです。しかし、見ることができるように、フレームとコンテンツは最小化とアクティブの両方で同じです。 – RainMan14
ああ、親のqwigetをどうやって最小化できますか?そして、最小化するときにタイトルバーを表示するにはどうすればいいですか? –