Problem related to clicked signal?
-
While i am pressing a button and releasing it outside the button area how clicked signal is calling its corresponding slot. i mean it should not be called. What may be the wrong in my code.
@ QObject::connect (button1, SIGNAL(clicked()), &a, SLOT(quit()));@ -
The code is following
@button.cpp
ofi_vc_gui_button::ofi_vc_gui_button (QWidget *parent):
QPushButton(parent)
{
button_width = 0;button_height = 0; tt_width = 0; num_of_images = 0; num_of_states = 0; m_hovered = false; m_pressed = false; link_flag = false; tt_flag = true; tm_flag = false; key_support = false; is_animate = false; image_index = 0; flag = false; btn_state = false; memset (button_txt, NULL, OFI_VC_GUI_BTN_MAX_TXT_LEN);
}
void ofi_vc_gui_button::create_button (QPixmap &image,QString tool_tip_text,char *btn_txt,bool erase_bkground, QRect rect,
bool key_supp,
int num_states){
pixmap = image;
button_width = rect.width ();button_height = rect.height(); num_of_states = num_states; num_of_images = pixmap.width()/button_width; strcpy_s(button_txt, btn_txt); tt_text = tool_tip_text; key_support = key_supp; qDebug ()<<"key support"; create_region (); target = QRectF(0.0, 0.0, button_width, button_height); draw_button (OFI_VC_GUI_BTN_STATE_NORMAL);
}
void ofi_vc_gui_button::keyPressEvent (QKeyEvent *event)
{if (key_support == true) { if (event->key () == Qt::Key_Enter) { event->accept (); emit clicked(); } else { event->ignore (); } }
}
void ofi_vc_gui_button::mousePressEvent (QMouseEvent *e)
{
qDebug ()<<"mouse press";
qDebug ()<<e->globalPos ();// Check the button is enabled or not. if (this->isEnabled ()) { draw_button (OFI_VC_GUI_BTN_STATE_PUSHED); } QPushButton::mousePressEvent (e);
}
void ofi_vc_gui_button::mouseMoveEvent (QMouseEvent *e)
{
qDebug ()<<this;
qDebug()<<QApplication::widgetAt (e->globalPos ());
if (!(QApplication::widgetAt (e->globalPos ()) == this)) {
qDebug ()<<"mouse move";
qDebug()<< e->pos ();
draw_button (OFI_VC_GUI_BTN_STATE_NORMAL);
}
QPushButton::mouseMoveEvent (e);
}void ofi_vc_gui_button::mouseReleaseEvent (QMouseEvent *e)
{
qDebug()<<e->globalPos ()<<QApplication::widgetAt (e->globalPos ());
qDebug ()<<"mouse release";if (num_of_states == 2) { if (flag) { draw_button (OFI_VC_GUI_BTN_STATE_NORMAL); flag = false; } else { draw_button (OFI_VC_GUI_BTN_STATE_PUSHED); flag = true; } } else { draw_button (OFI_VC_GUI_BTN_STATE_HOVER); } QPushButton::mouseReleaseEvent (e);
}
ofi_vc_gui_button::paintEvent(){
...........................................
}main.cpp
#include <QtGui/QApplication>
#include "ofi_vc_gui_button.h"int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget window;int button_states = 3; int tooltip_width = 57; QRect rect(20, 30, 47, 51); QPixmap pixmap(":/images/endcall.png"); char btn_txt[30] = ""; QColor col(0, 255, 255); QString font_type("Calibri"); QString tt_text("normal text"); QString ptt_text("pushed state"); QString dtt_text("disable text"); QString dptt_text("disable pushed"); window.setFocusPolicy (Qt::TabFocus); bool erase_bkground = false; ofi_vc_gui_button *button1 = new ofi_vc_gui_button(&window); button1->create_button (pixmap, tt_text, btn_txt, erase_bkground, rect, false, button_states); button1->set_link_flag (false); button1->set_text_color (col); button1->set_font(font_type); button1->setGeometry(60, 70, 80, 90); window.setAttribute (Qt::WA_AlwaysShowToolTips, true); pixmap.load (":/images/record.png"); rect = QRect(60, 50, 17, 14); button_states = 3; ofi_vc_gui_button *button2 = new ofi_vc_gui_button(&window); button2->create_button (pixmap, tt_text, btn_txt, erase_bkground, rect, button_states); //button2->activate_tool_tip (false); button2->setGeometry (180,200,60,70); button_states = 2; rect = QRect(100, 150, 17, 16); ofi_vc_gui_button *button3 = new ofi_vc_gui_button(&window); pixmap.load (":/images/audio.png"); button3->create_button (pixmap, tt_text, btn_txt, erase_bkground, rect, button_states); button3->setGeometry (100,150,120,63); //button3->set_button_state (true); button2->enable_button (false); QObject::connect (button1, SIGNAL(clicked()), &a, SLOT(quit())); qDebug ()<<"key support";
#if defined(Q_WS_S60)
window.showMaximized();
#else
window.show();
#endifreturn a.exec();
}
@