I am implementing an application in which i am having 3 QToolButton
and when the focus is coming on any QToolButton
it should resize
.
One of my friend has given me answer but i am unable to figure it out as i am inheriting QMainWindow
class as well in my mainWindow. He is telling to inherit QToolButton
too. But multiple inheritance problem will occur. So how exactly to use focusInEvent()
.
MyCode:
mywindow.h :
class mywindow : public QMainWindow
{
Q_OBJECT
public:
mywindow() ;
protected:
void keyReleaseEvent(QKeyEvent *event);
void focusInEvent(QFocusEvent *event);
void focusOutEvent(QFocusEvent *event);
private:
QWidget *widget;
QStackedWidget *stack1;
QToolBar *tool;
QListWidget *list1;
QListWidget *list2;
QVBoxLayout *vertical;
QToolButton *button1;
QToolButton *button2;
QToolButton *button3;
public slots:
void fileNew();
void file();
bool eventFilter(QObject *object, QEvent *event);
};
mywindow.cpp :
mywindow::mywindow() : QMainWindow()
{
//some code
}
My friend's code which i have to merge :
class mywindow : public QToolButton
{
private:
int originalWidth, originalHeight;
int bigWidth, bigHeight;
};
void focusInEvent ( QFocusEvent * event ) {
resize(bigWidth,bigHeight);
QToolButton::focusInEvent(event);
}
void focusOutEvent ( QFocusEvent * event ) {
resize(originalWidth,originalHeight);
QToolButton::focusOutEvent(event);
}
you should do something like this
class YourButton : public QToolButton
{
Q_OBJECT
protected:
void focusInEvent(QFocusEvent* e);
void focusOutEvent(QFocusEvent* e);
};
in .cpp file
void YourButton::focusInEvent(QFocusEvent* e)
{
if (e->reason() == Qt::MouseFocusReason)
{
// Resize the geometry -> resize(bigWidth,bigHeight);
}
QToolButton::focusInEvent(e);
}
then use the yourButton class in your mainWindow.
also (another option) you can use http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter in your mainWindow .