首先要显示窗口的自定义外形,不要让窗口显示工具栏之类的空间,所以ui界面要从wiget类继承
class Eyw1 : public QWidget
{
Q_OBJECT
public:
Eyw1(QWidget *parent = 0, Qt::WFlags flags =Qt::FramelessWindowHint);//注意要修改默认生成的这个行,让窗口为无关闭和最大小话按钮
//现在窗体还不能移动
~Eyw1();
private:
Ui::Eyw1Class ui;
};
Eyw1::Eyw1(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
this->setAttribute(Qt::WA_TranslucentBackground, true); //设置窗体为背景透明
}
在ui设计时添加一个QLable *lable;
添加一个图片资源,把lable->pixmap设置成图片
今天笔记:
1:设计窗体从QWidget继承,
2:在构造函数中设置窗体为无边界窗体Eyw1(QWidget *parent = 0, Qt::WFlags flags =Qt::FramelessWindowHint);//注意要修改默认生成的这个行,让窗口为无关闭和最大小话按钮
3:在构造函数中设置窗体背景透明背景this->setAttribute(Qt::WA_TranslucentBackground, true);//设置窗体背景为透明背景
4:this->setWindowOpacity(0.5);//设置窗体的透明度
5:在窗体的背景上实现绘图
要在窗体的背景上实现绘图功能,需要将窗体的void paintEvent(QPaintEvent *)虚函数重新实现,实现过程为
现在类定义中声明void paintEvent(QPaintEvent *);
然后在类的cpp文件中实现void paintEvent(QPaintEvent *){}
void EyePro1::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen; //画笔
pen.setColor(QColor(185,122,87));
QBrush brush(QColor(0,255,0,125)); //画刷
painter.setPen(pen); //添加画笔
painter.setBrush(brush); //添加画刷
painter.drawRect(0,0,this->width(),this->height());//绘制矩形,在整个窗体上填充颜色
}
要给Qwidget添加右键菜单的话,重新实现虚函数voidQwidget::contextMenuEvent(QContextMenuEvent* )就行了
void EyePro1::contextMenuEvent(QContextMenuEvent* e)
{
QMenu *menu = new QMenu(this);
menu->addAction(new QAction(tr("&Open"), menu));
menu->addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), menu));
menu->addAction(new QAction(tr("&Quit"), menu));
menu->move(cursor().pos()); //让菜单显示的位置在鼠标的坐标上
menu->show();
}
上面直接是在 contextMenuEvent 函数体里面 new 了个菜单和一些菜单项,这是为了演示。实际在写程序的过程中,我们往往会把这些 QAction 和 QMenu 声明为私有的成员变量,在构造 Widget 的时候,或者第一次调用 contextMenuEvent 时初始化它们,把它们的某些信号(signal)与其它组件的某些槽(slot)连接以处理一些事件,比如说单击上面演示的Open项目会弹出一个对话框,单击Quit会退出程序等等。
在窗体背景上显示图片:
void EyePro1::paintEvent(QPaintEvent *)//重载QWidget的paintEvent 函数
{
QPainter painter(this);
QPen pen; //画笔
pen.setColor(*windowColor);
QBrush brush(*windowColor); //画刷
painter.drawPixmap(pixmap->rect(),*pixmap);
}