| Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |
This example shows how to implement widgets that should pop up.
Header file:
/****************************************************************************
** $Id: qt/popup.h 3.3.8 edited Jan 11 14:46 $
**
** Definition of something or other
**
** Created : 979899
**
** Copyright (C) 1997-2007 Trolltech ASA. All rights reserved.
**
** This file is part of an example program for TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#ifndef POPUP_H
#define POPUP_H
#include <ntqlabel.h>
#include <ntqpushbutton.h>
#include <ntqlineedit.h>
class FancyPopup : public TQLabel
{
TQ_OBJECT
public:
FancyPopup( TQWidget* parent = 0, const char* name=0);
void popup( TQWidget* parent = 0);
protected:
virtual void mouseMoveEvent( TQMouseEvent * );
virtual void mouseReleaseEvent( TQMouseEvent * );
virtual void closeEvent( TQCloseEvent * );
private:
TQWidget* popupParent;
int moves;
};
class Frame : public TQFrame
{
TQ_OBJECT
public:
Frame( TQWidget *parent=0, const char* name=0);
protected:
private slots:
void button1Clicked();
void button2Pressed();
private:
TQPushButton *button1;
TQPushButton *button2;
TQFrame* popup1;
FancyPopup* popup2;
};
#endif
Implementation:
/****************************************************************************
** $Id: qt/popup.cpp 3.3.8 edited Jan 11 14:37 $
**
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
**
** This file is part of an example program for TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "popup.h"
#include <ntqapplication.h>
#include <ntqlayout.h>
FancyPopup::FancyPopup( TQWidget* parent, const char* name ):
TQLabel( parent, name, WType_Popup ){
setFrameStyle( WinPanel|Raised );
setAlignment( AlignCenter );
resize(150,100);
moves = 0;
setMouseTracking( TRUE );
}
void FancyPopup::mouseMoveEvent( TQMouseEvent * e){
moves++;
TQString s;
s.sprintf("%d/%d", e->pos().x(), e->pos().y());
if (e->state() & TQMouseEvent::LeftButton)
s += " (down)";
setText(s);
}
void FancyPopup::mouseReleaseEvent( TQMouseEvent * e){
if (rect().contains( e->pos() ) || moves > 5)
close();
}
void FancyPopup::closeEvent( TQCloseEvent *e ){
e->accept();
moves = 0;
if (!popupParent)
return;
// remember that we (as a popup) might recieve the mouse release
// event instead of the popupParent. This is due to the fact that
// the popupParent popped us up in its mousePressEvent handler. To
// avoid the button remaining in pressed state we simply send a
// faked mouse button release event to it.
TQMouseEvent me( TQEvent::MouseButtonRelease, TQPoint(0,0), TQPoint(0,0), TQMouseEvent::LeftButton, TQMouseEvent::NoButton);
TQApplication::sendEvent( popupParent, &me );
}
void FancyPopup::popup( TQWidget* parent) {
popupParent = parent;
setText("Move the mouse!");
if (popupParent)
move( popupParent->mapToGlobal( popupParent->rect().bottomLeft() ) );
show();
}
Frame::Frame(TQWidget* parent, const char* name): TQFrame(parent, name){
button1 = new TQPushButton("Simple Popup", this);
connect ( button1, SIGNAL( clicked() ), SLOT( button1Clicked() ) );
button2 = new TQPushButton("Fancy Popup", this);
connect ( button2, SIGNAL( pressed() ), SLOT( button2Pressed() ) );
TQBoxLayout * l = new TQHBoxLayout( this );
button1->setMaximumSize(button1->sizeHint());
button2->setMaximumSize(button2->sizeHint());
l->addWidget( button1 );
l->addWidget( button2 );
l->activate();
// button1->setGeometry(20,20,100,30);
// button2->setGeometry(140,20,100,30);
resize(270, 70);
//create a very simple popup: it is just composed with other
//widget and will be shown after clicking on button1
popup1 = new TQFrame( this ,0, WType_Popup);
popup1->setFrameStyle( WinPanel|Raised );
popup1->resize(150,100);
TQLineEdit *tmpE = new TQLineEdit( popup1 );
connect( tmpE, SIGNAL( returnPressed() ), popup1, SLOT( hide() ) );
tmpE->setGeometry(10,10, 130, 30);
tmpE->setFocus();
TQPushButton *tmpB = new TQPushButton("Click me!", popup1);
connect( tmpB, SIGNAL( clicked() ), popup1, SLOT( close() ) );
tmpB->setGeometry(10, 50, 130, 30);
// the fancier version uses its own class. It will be shown when
// pressing button2, so they behavior is more like a modern menu
// or toolbar.
popup2 = new FancyPopup( this );
// you might also add new widgets to the popup, just like you do
// it with any other widget. The next four lines (if not
// commented out) will for instance add a line edit widget.
// tmpE = new TQLineEdit( popup2 );
// tmpE->setFocus();
// connect( tmpE, SIGNAL( returnPressed() ), popup2, SLOT( close() ) );
// tmpE->setGeometry(10, 10, 130, 30);
}
void Frame::button1Clicked(){
popup1->move( mapToGlobal( button1->geometry().bottomLeft() ) );
popup1->show();
}
void Frame::button2Pressed(){
popup2->popup(button2);
}
int main( int argc, char **argv )
{
TQApplication a(argc,argv);
Frame frame;
frame.setCaption("TQt Example - Custom Popups");
a.setMainWidget(&frame);
frame.show();
return a.exec();
}
See also Examples.
| Copyright © 2007 Trolltech | Trademarks | TQt 3.3.8
|