qt 任务栏不出现图标

68 篇文章 3 订阅
这篇博客介绍了如何在Qt中创建一个自定义的标题栏,包括设置窗口无边框、添加拖动功能和双击最大化等操作。通过`MyTitleBar`类实现了窗口的最小化、最大化和关闭功能,并处理了鼠标点击和移动事件。同时展示了如何在QDialog中根据用户交互返回不同值。
摘要由CSDN通过智能技术生成

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();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值