RegeisterFace::RegeisterFace(QWidget *parent) :
QDialog(parent),
ui(new Ui::RegeisterFace)
{
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
this->setWindowFlags(Qt::FramelessWindowHint|Qt::Tool);
}
设置自制qt窗口的标题栏:
#ifndef MYTITLEBAR_H
#define MYTITLEBAR_H
#include <QWidget>
#define STRETCH_RECT_HEIGHT 4
#define STRETCH_RECT_WIDTH 4
class MyTitleBar : public QWidget
{
Q_OBJECT
public:
explicit MyTitleBar(QWidget *parent = 0);
~MyTitleBar();
void setResizeFlag(bool flag) { m_bResize = flag; }
public slots:
// void onClickedMinButton();
// void onClickedMaxButton();
// void onClickedCloseButton();
QWidget *getPWindow(){return m_pWindow;}
signals:
void updateMaximize();
protected:
virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void showEvent(QShowEvent *event);
void paintEvent(QPaintEvent *e);
private:
private:
bool m_pressed;
bool m_bResize;
QPoint m_pos;
QWidget *m_pWindow;
QPoint m_WindowPoint;
QRect m_leftTopRect;
QRect m_rightTopRect;
QRect m_topBorderRect;
};
#endif
#include
#include
#include
#include
#include
#include “./loginmodule/mainwindow/baseclass/mytitlebar.h”
-
MyTitleBar::MyTitleBar(QWidget *parent)
-
QWidget(parent)
{
m_pWindow = this->window();
m_WindowPoint = m_pWindow->pos();
m_pressed = false;
m_bResize = true;
}
MyTitleBar::~MyTitleBar()
{
}
void MyTitleBar::showEvent(QShowEvent *event)
{
m_leftTopRect = QRect(0, 0, STRETCH_RECT_WIDTH, this->height());
m_rightTopRect = QRect(this->width() - STRETCH_RECT_WIDTH, 0, STRETCH_RECT_WIDTH, this->height());
m_topBorderRect = QRect(0, 0, this->width(), STRETCH_RECT_HEIGHT);
QWidget::showEvent(event);
}
void MyTitleBar::mouseDoubleClickEvent(QMouseEvent *event)
{
// if (m_bResize)
// {
// onClickedMaxButton();
// }
QWidget::mouseDoubleClickEvent(event);
}
//void MyTitleBar::onClickedMinButton()
//{
// m_pWindow->showMinimized();
//}
//void MyTitleBar::onClickedMaxButton()
//{
// if (m_pWindow->isMaximized())
// {
// m_pWindow->showNormal();
// }
// else
// {
// m_pWindow->showMaximized();
// }
//}
//void MyTitleBar::onClickedCloseButton()
//{
// m_pWindow->close();
//}
void MyTitleBar::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
if (m_leftTopRect.contains(event->pos()) || m_rightTopRect.contains(event->pos()) || m_topBorderRect.contains(event->pos()))
{
return;
}
if (event->button() == Qt::LeftButton)
{
m_pos = event->pos();
m_pressed = true;
}
}
void MyTitleBar::mouseMoveEvent(QMouseEvent *event)
{
QWidget::mouseMoveEvent(event);
if (m_pressed)
{
QPoint tempPos = event->pos() - m_pos;
if(tempPos.x() == 0 && tempPos.y() == 0) return;
if (m_pWindow->isMaximized())
{
m_pWindow->showNormal();
return;
}
QPoint movePos = event->pos() - m_pos + m_pWindow->pos();
if ( movePos.x() < 0 || movePos.y() < 0 )
{
return;
}
m_pWindow->move(movePos);
if (m_pWindow->pos() != m_WindowPoint)
{
emit updateMaximize();
}
}
}
void MyTitleBar::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
m_pressed = false;
}
void MyTitleBar::paintEvent(QPaintEvent *e)
{
QWidget::paintEvent(e);
QStyleOption option;
option.initFrom(this);
QPainter painter(this);
style()->drawPrimitive(QStyle::PE_Widget, &option, &painter, this);
}
同时qialog返回任意值的代码:
void ReadAndWriteCard::closeWindow()
{
QPushButton* f_sender = qobject_cast<QPushButton*>(sender());
if(f_sender->objectName() == “writecard”)
{
done(2);
}
if(f_sender->objectName() == “readcard”)
{
done(3);
}
if(f_sender->objectName() == “close”)
{
emit reject();
}
}