头文件
#ifndef HINT_INTERFACE_H
#define HINT_INTERFACE_H
#include <QWidget>
#include <QMouseEvent>
extern bool DataBaseError;
namespace Ui {
class HintInterface;
}
class HintInterface : public QWidget
{
Q_OBJECT
public:
explicit HintInterface(QWidget *parent = nullptr);
~HintInterface();
void setWindow(QString title, QString picture, QString content, QPoint location);
protected:
void mouseMoveEvent(QMouseEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
signals:
void isclose();
private slots:
void on_pushButton_clicked();
private:
Ui::HintInterface *ui;
QPoint press_point;//鼠标按下去的点
bool is_move;
};
#endif // HINT_INTERFACE_H
cpp
#include "hint_interface.h"
#include "ui_hint_interface.h"
bool DataBaseError = false;
HintInterface::HintInterface(QWidget *parent) :
QWidget(parent),
ui(new Ui::HintInterface)
{
ui->setupUi(this);
this->setWindowTitle(QString("通知"));
this->setWindowIcon(QIcon(QApplication::applicationDirPath() + QString("/") + "image/mainframe.ico"));
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
this->setWindowModality(Qt::ApplicationModal);
this->setAttribute(Qt::WA_DeleteOnClose);
}
HintInterface::~HintInterface()
{
delete ui;
}
void HintInterface::setWindow(QString title, QString picture, QString content, QPoint location)
{
this->ui->label ->setText(title);
this->setWindowTitle(title);
this->ui->label_2->setPixmap(QPixmap::fromImage(QImage(picture)));
this->ui->label_2->setScaledContents(true);
this->ui->label_3->setText(content);
this->ui->label_3->setWordWrap(true);
this->move(location);
this->show();
}
void HintInterface::mouseMoveEvent(QMouseEvent *e)
{
if((e->buttons() == Qt::LeftButton) && is_move)
{
QWidget::mousePressEvent(e);
QPoint mouseP = e->globalPos();
QPoint endP(mouseP.x() - press_point.x(), mouseP.y() - press_point.y());
this->move(endP);
}
}
void HintInterface::mousePressEvent(QMouseEvent *e)
{
press_point = QPoint();
QWidget::mousePressEvent(e);
QPoint mouseP = e->globalPos();
int x = this->geometry().topLeft().x();
int y = this->geometry().topLeft().y();
int x_w = mouseP.x() - x;
int y_w = mouseP.y() - y;
press_point.setX(x_w);
press_point.setY(y_w);
is_move = true;
}
void HintInterface::mouseReleaseEvent(QMouseEvent *e)
{
if(is_move)
{
is_move = false;
}
}
void HintInterface::on_pushButton_clicked()
{
emit this->isclose();
}
示例:
HintInterface *hint_interface = new HintInterface();
QPoint main_point = this->mapToGlobal(QPoint((this->width() - hint_interface->width())/2, (this->height() - hint_interface->height())/2));
hint_interface->setWindow("提示", QApplication::applicationDirPath() + QString("/") + "image", QString("说明"), main_point);
return;