现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

Qt实现一个自定义的窗口

2015-04-15 20:18 工业·编程 ⁄ 共 921字 ⁄ 字号 暂无评论

在Qt里面自定义部件,一般都是继承自QWidget,如果自定义MainWidget

class MainWindow : public QWidget
{
    Q_OBJECT
    
public:
    MainWindow(QWidget *parent = 0);
    virtual ~MainWindow();

};

在构造函数MainWindow里面实现如下:

	setWindowFlags(
			Qt::FramelessWindowHint | Qt::WindowSystemMenuHint
					| Qt::WindowMinimizeButtonHint);
    setAttribute(Qt::WA_TranslucentBackground);

Flags 表示无边框,在任务里支持系统菜单,点击任务栏能实现最小化(如果不指定该参数,会失效)。

重载painEvent

A.如果只是用一张图片做背景,不考虑resize问题,可直接用图片填充

    QPainter painter(this);
    painter.fillRect(0, 0, backgroundPixmap_->width(), backgroundPixmap_->height(), *backgroundPixmap_);

B.如果想自己自绘圆角矩形

	QBitmap back_ground(size());
	QPainter painter(&back_ground);
	painter.fillRect(rect(),Qt::white);
	painter.setBrush(QColor(0,0,0));
	painter.drawRoundedRect(this->rect(),10,10);
	setMask(back_ground);

这种方法实现出来的圆角并不完美,圆角看上去像直接切的,没有完美的弧度,不过已经满足需求

C.Qt4教程自定义外观那一章,有讲到如何设置按钮样式,如图

一般窗口的边框Frame,A C G I四块是固定,能保证在窗口改变大小时这四块不变,其他块随着大小伸缩即可

但是如果要自绘边框,主要是D F块,就要考虑D F块也固定

可以通过自绘实现较完美的圆角,可以参考QSkinObject,也可以通过设置加载圆角矩形图片做为背景,切割图片为九块。

给我留言

留言无头像?