由于Qt本身不提供这种类型的小部件,最好的方法是继承QPushButton并重新实现paintEvent
。然后,您可以通过简单地绘制包含胶囊按钮屏幕截图的QPixmap来绘制胶囊像素图。您可以通过重新实现mousePressEvent
和mouseReleaseEvent
来添加点击行为。
// CapsuleButton.h
class CapsuleButton : public QPushPutton {
// ...
protected:
void paintEvent(QPaintEvent*);
void mousePressEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
// ...
private:
QPixmap pixmap_;
QPixmap pressedPixmap_;
bool pressed_;
};
// CapsuleButton.cpp
CapsuleButton::CapsuleButton(QObject* parent) :
QPushButton(parent),
pixmap_(":/capsule-button-background.png"),
pressedPixmap_(":/capsule-button-background-pressed.png"),
pressed_(false)
{ /*...*/ }
void CapsuleButton::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(rect(), pressed_? pressedPixmap_ : pixmap_);
}
void CapsuleButton::mousePressEvent(QMouseEvent* event)
{
if (event->button() == Qt::LeftButton)
pressed_ = true;
update();
}
void CapsuleButton::mouseReleaseEvent(QMouseEvent*)
{
pressed_ = false;
update();
}
我有软件写关于如何创建定制的部件一个简短的教程:http://www.serenethinking.com/2010/08/how-to-create-custom-widgets-with-qt/
也许没有什么帮助。