QT-锁定对话框固定不能拉伸和定位并且不能关闭

[color=green][i][b]
Author:QQ174554431
[/b][/i][/color]

//lockwindow.h
#ifndef LOCKWINDOW_H
#define LOCKWINDOW_H

#include <QtGui/QPushButton>
#include <QtGui/QDialog>
#include <QtGui/QHBoxLayout>
#include <QEvent>
#include <QResizeEvent>

class LockWindow : public QDialog
{
Q_OBJECT

public:
LockWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
~LockWindow();

protected:
void moveEvent(QMoveEvent* pEvent );
void closeEvent ( QCloseEvent * event ) ;
public slots:
void OnButtonLockWindow();
private:
bool isLocked;
QPushButton *lockButton;
QHBoxLayout *hBoxLayout;

QRect m_LockedRect;
Qt::WindowFlags m_windowsFlags;


};

#endif // LOCKWINDOW_H




//lockwindow.cpp

#include "lockwindow.h"

LockWindow::LockWindow(QWidget *parent, Qt::WFlags flags)
: QDialog(parent, flags)
{
isLocked = false;
lockButton = new QPushButton();
lockButton->setText(tr("Lock"));
lockButton->setFixedSize(100,30);
resize(600, 400);
hBoxLayout = new QHBoxLayout(this);
hBoxLayout->addWidget(lockButton);
setMinimumSize(300,200);
setMaximumSize(900,600);
m_windowsFlags = windowFlags();
setLayout(hBoxLayout);
connect(lockButton,SIGNAL(clicked()),this,SLOT(OnButtonLockWindow()));
}


LockWindow::~LockWindow()
{

}

void LockWindow::OnButtonLockWindow()
{
if(isLocked)
{
lockButton->setText("Lock");
setWindowFlags(m_windowsFlags|Qt::WindowStaysOnTopHint);
//or setWindowFlags(windowFlags()&(~Qt::MSWindowsFixedSizeDialogHint));
show();
}
else
{
lockButton->setText("UnLock");
setWindowFlags(m_windowsFlags|Qt::MSWindowsFixedSizeDialogHint |Qt::WindowStaysOnTopHint);
//or setWindowFlags(windowFlags()|Qt::MSWindowsFixedSizeDialogHint|Qt::WindowStaysOnTopHint);
show();
m_LockedRect = this->geometry();
}
isLocked = !isLocked;
}

void LockWindow::moveEvent( QMoveEvent* pEvent )
{
if(isLocked)
{
this->setGeometry(m_LockedRect);
}

QDialog::moveEvent(pEvent);
}

void LockWindow::closeEvent ( QCloseEvent * cEvent )
{
if(isLocked)
{
cEvent->ignore();
}
else
{
QDialog::closeEvent(cEvent);
}
}






//main.cpp
#include "lockwindow.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LockWindow w;
w.show();
return a.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值