因為需要經常性將slider值設回100,加了一個text為100的push button,於click後作動。
原本在MainWindow寫好接收push button clicked signal的slot,於其中呼叫slider的setValue(int)設值。
後來越看越覺得這樣多一層函式很醜,因為setValue(int)本來就是slot。
為何不直接繼承出一種有clicked(int) signal的push button?
實作如下:
class MyPushButton : public QPushButton{
Q_OBJECT
public:
explicit MyPushButton(QWidget* parent = 0);
signals:
void clicked(int value);
void clicked(double value);
protected:
void mouseReleaseEvent(QMouseEvent* e);
};
繼承QPushButton,增加clicked(int)與clicked(double)兩個signals,並override mouseReleaseEvent以於正確時機emit。
NumberButton::NumberButton(QWidget* parent)
: QPushButton(parent)
{ }
建構式,不搞怪乖乖把parent傳到QPushButton建構式
void MyPushbutton::mouseReleaseEvent(QMouseEvent* e)
{
if(e->button() == Qt::LeftButton && hitButton(e->pos())){
emit clicked(text().toInt());
emit clicked(text().toDouble());
}
QPushButton::mouseReleaseEvent(e);
}
放開的button為滑鼠左鍵(表示先前一定有按下),且游標仍在Button內,則發出signal。
最後將QMouseEvent傳回QPushButton::mouseReleaseEvent,做正常處理。
沒有留言:
張貼留言