如何在 QWidget上实现QT动态添加QPushbutton及事件处
推荐于2016-10-02 · 知道合伙人影视综艺行家
关注
展开全部
最近看到很多项目界面设计的很有个性,突破qt的原先风格。
才知道button和label可以自由设计形状。
举例:如何改变qt的button规则呢
Qt中有两种方法来实现不规则形状的窗口
可以设置QWidget的窗口属性Qt::WA_TranslucentBackground为true来实现。但是利用这个属性有很大的限制。在window平台下,你必须设置Qt::FramelessWindowHint属性为true,设置窗口为一个没有标题栏的窗口。在X11平台下,你还要依靠 a compositing window manager.局限很多 。
利用setMask()函数来实现, void QWidget::setMask ( const QRegion & region ) 可以使得仅和region重叠的区域可见。但是,如果这个区域包括widget的rect()以外的像素,窗口控制的这个区域可见不可见,将取决于具体的平台。 所以,如果获得这个不规则的区域,然后在resizeEvent函数中调用这个函数,就可以获得一个不规则的形状的窗口。
qt的帮助文档上写到:
QPixmap pixmapLeft(":/MainWindow/Resources/Images/TestLeft.png");
ui.btnLeft->setMask(pixmapLeft.mask());
QPixmap pixmapRight(":/MainWindow/Resources/Images/TestRight.png");
ui.btnRight->setMask(pixmapRight.mask());
QLabel topLevelLabel;
QPixmap pixmap(":/images/tux.png");
topLevelLabel.setPixmap(pixmap);
topLevelLabel.setMask(pixmap.mask());
先通过pix的方法获得图片的过滤掉透明的部分得到的图片,作为button和label的不规则边框。
所以只需要在ps里画一个含有透明部分的图片,保存成png格式,然后用它来setMask你的按钮和文本标签。
最后软件运行后,按钮效果,只有不透明的地方,才有点击效果。透明的地方看不到按钮。
才知道button和label可以自由设计形状。
举例:如何改变qt的button规则呢
Qt中有两种方法来实现不规则形状的窗口
可以设置QWidget的窗口属性Qt::WA_TranslucentBackground为true来实现。但是利用这个属性有很大的限制。在window平台下,你必须设置Qt::FramelessWindowHint属性为true,设置窗口为一个没有标题栏的窗口。在X11平台下,你还要依靠 a compositing window manager.局限很多 。
利用setMask()函数来实现, void QWidget::setMask ( const QRegion & region ) 可以使得仅和region重叠的区域可见。但是,如果这个区域包括widget的rect()以外的像素,窗口控制的这个区域可见不可见,将取决于具体的平台。 所以,如果获得这个不规则的区域,然后在resizeEvent函数中调用这个函数,就可以获得一个不规则的形状的窗口。
qt的帮助文档上写到:
QPixmap pixmapLeft(":/MainWindow/Resources/Images/TestLeft.png");
ui.btnLeft->setMask(pixmapLeft.mask());
QPixmap pixmapRight(":/MainWindow/Resources/Images/TestRight.png");
ui.btnRight->setMask(pixmapRight.mask());
QLabel topLevelLabel;
QPixmap pixmap(":/images/tux.png");
topLevelLabel.setPixmap(pixmap);
topLevelLabel.setMask(pixmap.mask());
先通过pix的方法获得图片的过滤掉透明的部分得到的图片,作为button和label的不规则边框。
所以只需要在ps里画一个含有透明部分的图片,保存成png格式,然后用它来setMask你的按钮和文本标签。
最后软件运行后,按钮效果,只有不透明的地方,才有点击效果。透明的地方看不到按钮。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询