[转载][转]qt 自定义button的位置和大小
(2015-07-31 16:58:39)
标签:
转载 |
分类: Qt |
原文地址:[转]qt 自定义button的位置和大小 作者:爱德华软绵绵
Qt自带的PushButton样式比较单一,在开发的时候往往按钮的形状各异,所以需要自定义Qt的按钮。其方法是做一张图片来作为按钮,如果需要动态效果的话,可以做两张图片进行替换。按钮的载体可以是QLabel、QPushButton,可以通过QStyle类来设计样式,如果对QStyle不太了解的话,可以用下面的方法来实现。
1. 使用QPushButton
实现代码:
-
QPushButton
*custButton(QString str,QString str1) -
{
-
QPushButton *pushButton= new QPushButton; -
-
pushButton->setGeometry(10,10,200,200); //按钮的位置及大小 -
pushButton->clearMask(); -
pushButton->setBackgroundRole( QPalette::Base); -
-
QPixmap mypixmap; mypixmap.load(str); -
-
pushButton->setFixedSize( mypixmap.width(), mypixmap.height() ); -
pushButton->setMask(mypixmap.createHeuristicMask()); -
pushButton->setIcon(mypixmap); -
pushButton->setIconSize(QSize(mypixmap.width(),mypixmap.height())); -
pushButton->setToolTip(str1); -
return pushButton; -
}
调用代码:
-
QPushButton
*btn=custButton( "../login.png","LOGIN"); -
-
connect(btn,
SIGNAL(clicked()), this, SLOT(slotLogin()));
2. 通过QLabel
代码widget.h
-
#ifndef
WIDGET_H -
#define
WIDGET_H -
-
#include
<QWidget> -
-
namespace
Ui { -
class Widget; -
}
-
-
class
Widget public: QWidget { -
Q_OBJECT -
public:
-
Widget(QWidget *parent = 0); -
~Widget(); -
-
signals:
-
void clicked(); -
-
protected:
-
void mousePressEvent(QMouseEvent *e); -
-
protected
slots: -
void slotClicked(); -
-
private:
-
Ui::Widget *ui; -
};
-
-
#endif
// WIDGET_H
代码widget.cpp
-
#include
"widget.h" -
#include
"ui_widget.h" -
#include
<QMouseEvent> -
#include
<QMessageBox> -
#include
<QPixmap> -
#include
<QLabel> -
-
Widget::Widget(QWidget
*parent) : -
QWidget(parent), -
ui(new Ui::Widget) -
{
-
ui->setupUi(this); -
//使用label作为按钮,通过自定义鼠标事件,点击label所在区域实现鼠标单击 -
QPixmap pm; pm.load("../logo.png"); -
ui->label->setGeometry(0,0,pm.width(), pm.height()); -
ui->label->setPixmap(pm); -
-
connect( this, SIGNAL(clicked()), this,SLOT(slotClicked())); //信号连接 -
}
-
-
Widget::~Widget()
-
{
-
delete ui; -
}
-
-
-
void
Widget::mousePressEvent(QMouseEvent *e) -
{
-
int x = e->x(); -
int y = e->y(); -
-
//假如在QRect( 0, 0, 48, 48 )这个区域里(图片大小为48X48),就发出信号 -
if (x>0 && x<48 && y>0 && y<48){ -
emit clicked(); -
} -
}
-
-
void
Widget::slotClicked() -
{
-
QMessageBox::about( this, "Mouse Example" ,"You have );pressed mouse, exit now!" -
close(); -
-
}

加载中…