您的位置:首页 > 编程语言 > Qt开发

QT 自定义不规则提示框

2016-07-12 15:47 369 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/allan1234569/article/details/51889687

我们看到到过很多的输入提示的提示框,例如一个某个网站的注册界面,当用户注册时输入的格式不正确时,会有一个提示框弹出,来提示用户该如何输入。现在我们想在Qt中也实现这样一个效果,那么该如何实现呢?实现代码如下:

TipBox.h

#include <QWidget>
#include <QLabel>

class TipBox : public QWidget
{
Q_OBJECT
public:
explicit TipBox(QWidget *parent = 0);

void setTipText(const QString& txt);    //设置提示内容
signals:

public slots:

private:
QLabel *tip_label;

// QWidget interface
protected:
void paintEvent(QPaintEvent *);
};

TipBox.cpp

#include "TipBox.h"
#include <QLinearGradient>
#include <QPainter>
#include <QTimer>
TipBox::TipBox(QWidget *parent) :
QWidget(parent)
{
setFixedSize(180,70);
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);

tip_label = new QLabel(this);
tip_label->move(1,16);
tip_label->setFixedSize(this->width() - 2, this->height() - 17);
}

//设置提示内容
void TipBox::setTipText(const QString &txt)
{
tip_label->setText(txt);
}

//重绘窗口
void TipBox::paintEvent(QPaintEvent *)
{
QPainter painter2(this);
painter2.setPen(Qt::red);   //窗口框色

{//设置色调,渐变,可有可无
QLinearGradient linear2(rect().topLeft(), rect().bottomLeft());
linear2.setColorAt(0, QColor(247, 247, 250));
linear2.setColorAt(0.5, QColor(240, 242, 247));
linear2.setColorAt(1, QColor(233, 233, 242));
painter2.setBrush(linear2);
}

//自绘窗口
static const QPointF points[8] = {QPointF(15, 0), QPointF(15, 15), QPointF(0, 15), QPointF(0, this->height()-1), QPointF(this->width()-1, this->height()-1), QPointF(this->width()-1, 15),   QPointF(30, 15), QPointF(15, 0)};
painter2.drawPolygon(points, 8);
}

mainWindow.h

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_lineEdit_textChanged(const QString &arg1);

private:
Ui::MainWindow *ui;
};

mainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <TipBox.h>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
TipBox *tipbox = new TipBox(this);
tipbox->setTipText("这是一个提示");
tipbox->move(ui->lineEdit->geometry().left(),ui->lineEdit->geometry().bottom() + 5);
tipbox->show();
}

效果下如图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐