⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qxt.cpp

📁 Linux 下的图形编程环境。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    XtDisplayInitialize(appcon, qt_xdisplay(), name(),	appclass, options, num_options, &argc, argv);    init();}/*!  Constructs a QApplication from the \a display of an already-initialized  Xt application.  Use this constructor when introducing Qt widgets into an existing  Xt/Motif application.*/QXtApplication::QXtApplication(Display *display) :    QApplication(display){    my_xt = FALSE;    init();    appcon = XtDisplayToApplicationContext(display);}QXtApplication::QXtApplication(Display *display, int argc, char **argv)    : QApplication(display, argc, argv){    my_xt = FALSE;    init();    appcon = XtDisplayToApplicationContext(display);}/*!  Destructs the application.  Does not close the Xt toolkit.*/QXtApplication::~QXtApplication(){    ASSERT(qxtapp==this);    removeXtEventFilters();    qxtapp = 0;    // the manpage says: "or just exit", that's what we do to avoid    // double closing of the display//     if (my_xt) {//  	XtDestroyApplicationContext(appcon);//      }}void QXtApplication::init(){    ASSERT(qxtapp==0);    qxtapp = this;    installXtEventFilters();    qt_np_add_timeoutcb(np_do_timers);    qt_np_add_timer_setter(np_set_timer);    qt_np_add_event_proc(np_event_proc);    qt_np_count++;}/*!  \class QXtWidget qxt.h  \brief Allows mixing of Xt/Motif and Qt widgets.  \extension Xt/Motif  QXtWidget acts as a bridge between Xt and Qt. For utilizing old  Xt widgets, it can be a QWidget  based on a Xt widget class. For including Qt widgets in an existing  Xt/Motif application, it can be a special Xt widget class that is  a QWidget.  See the constructors for the different behaviors.*/void QXtWidget::init(const char* name, WidgetClass widget_class,		    Widget parent, QWidget* qparent,		    ArgList args, Cardinal num_args,		    bool managed){    need_reroot=FALSE;    xtparent = 0;    if (parent ) {	ASSERT(!qparent);	xtw = XtCreateWidget(name, widget_class, parent, args, num_args);	if ( widget_class == qWidgetClass )	    ((QWidgetRec*)xtw)->qwidget.qxtwidget = this;	xtparent = parent;	if (managed)	    XtManageChild(xtw);    } else {	ASSERT(!managed);	String n, c;	XtGetApplicationNameAndClass(qt_xdisplay(), &n, &c);	xtw = XtAppCreateShell(n, c, widget_class, qt_xdisplay(),			       args, num_args);	if ( widget_class == qWidgetClass )	    ((QWidgetRec*)xtw)->qwidget.qxtwidget = this;    }    if ( qparent ) {	XtResizeWidget( xtw, 100, 100, 0 );	XtSetMappedWhenManaged(xtw, False);	XtRealizeWidget(xtw);	XSync(qt_xdisplay(), False);    // I want all windows to be created now	XReparentWindow(qt_xdisplay(), XtWindow(xtw), qparent->winId(), x(), y());	XtSetMappedWhenManaged(xtw, True);	need_reroot=TRUE;    }    Arg reqargs[20];    Cardinal nargs=0;    XtSetArg(reqargs[nargs], XtNx, x());	nargs++;    XtSetArg(reqargs[nargs], XtNy, y());	nargs++;    XtSetArg(reqargs[nargs], XtNwidth, width());	nargs++;    XtSetArg(reqargs[nargs], XtNheight, height());	nargs++;    //XtSetArg(reqargs[nargs], "mappedWhenManaged", False);	nargs++;    XtSetValues(xtw, reqargs, nargs);    //#### destroy();   MLK    if (!parent || XtIsRealized(parent))	XtRealizeWidget(xtw);}/*!  Constructs a QXtWidget of the special Xt widget class known as  "QWidget" to the resource manager.  Use this constructor to utilize Qt widgets in an Xt/Motif  application.  The QXtWidget is a QWidget, so you can create  subwidgets, layouts, etc. using Qt functionality.*/QXtWidget::QXtWidget(const char* name, Widget parent, bool managed) :    xtw(NULL), QWidget( 0, name, WResizeNoErase ){    init(name, qWidgetClass, parent, 0, 0, 0, managed);    Arg reqargs[20];    Cardinal nargs=0;    XtSetArg(reqargs[nargs], XtNborderWidth, 0);            nargs++;    XtSetValues(xtw, reqargs, nargs);}/*!  Constructs a QXtWidget of the given \a widget_class.  Use this constructor to utilize Xt or Motif widgets in a Qt  application.  The QXtWidget looks and behaves  like the Xt class, but can be used like any QWidget.  Note that Xt requires that the most toplevel Xt widget is a shell.  That means, if \a parent is a QXtWidget, the \a widget_class can be  of any kind. If there isn't a parent or the parent is just a normal  QWidget, \a widget_class should be something like \c  topLevelShellWidgetClass.  If the \a managed parameter is TRUE and \a parent in not NULL,  XtManageChild it used to manage the child.*/QXtWidget::QXtWidget(const char* name, WidgetClass widget_class,		     QWidget *parent, ArgList args, Cardinal num_args,		     bool managed) :    xtw(NULL), QWidget( parent, name, WResizeNoErase ){    if ( !parent )	init(name, widget_class, 0, 0, args, num_args, managed);    else if ( parent->inherits("QXtWidget") )	init(name, widget_class, ( (QXtWidget*)parent)->xtw , 0, args, num_args, managed);    else	init(name, widget_class, 0, parent, args, num_args, managed);    create(XtWindow(xtw), FALSE, FALSE);}/*!  Destructs the QXtWidget.*/QXtWidget::~QXtWidget(){    // Delete children first, as Xt will destroy their windows    //    QObjectList* list = queryList("QWidget", 0, FALSE, FALSE);    if ( list ) {	QWidget* c;        QObjectListIt it( *list );        while ( (c = (QWidget*)it.current()) ) {            delete c;            ++it;        }        delete list;    }    if ( need_reroot ) {	hide();	XReparentWindow(qt_xdisplay(), winId(), qApp->desktop()->winId(),	    x(), y());    }    XtDestroyWidget(xtw);    destroy( FALSE, FALSE );}/*!  \fn Widget QXtWidget::xtWidget() const  Returns the Xt widget equivalent for the Qt widget.*//*!  Reimplemented to produce the Xt effect of getting focus when the  mouse enters the widget. <em>This may be changed.</em>*/bool QXtWidget::x11Event( XEvent * e ){    if ( e->type == EnterNotify ) {	if  ( xtparent )	    setActiveWindow();    }    return QWidget::x11Event( e );}/*!  Implement a degree of focus handling for Xt widgets.*/void QXtWidget::setActiveWindow(){    if  ( xtparent ) {	if ( !QWidget::isActiveWindow() && isActiveWindow() ) {	    XFocusChangeEvent e;	    e.type = FocusIn;	    e.window = winId();	    e.mode = NotifyNormal;	    e.detail = NotifyInferior;	    XSendEvent( qt_xdisplay(), e.window, TRUE, NoEventMask, (XEvent*)&e );	}    } else {	QWidget::setActiveWindow();    }}/*!  Different from QWidget::isActiveWindow() */bool QXtWidget::isActiveWindow() const{    Window win;    int revert;    XGetInputFocus( qt_xdisplay(), &win, &revert );    if ( win == None) return FALSE;    QWidget *w = find( (WId)win );    if ( w ) {	// We know that window	return w->topLevelWidget() == topLevelWidget();    } else {	// Window still may be a parent (if top-level is foreign window)	Window root, parent;	Window cursor = winId();	Window *ch;	unsigned int nch;	while ( XQueryTree(qt_xdisplay(), cursor, &root, &parent, &ch, &nch) ) {	    if (ch) XFree( (char*)ch);	    if ( parent == win ) return TRUE;	    if ( parent == root ) return FALSE;	    cursor = parent;	}	return FALSE;    }}/*!\reimp */void QXtWidget::moveEvent( QMoveEvent* ){    if ( xtparent || !xtw )	return;    XConfigureEvent c;    c.type = ConfigureNotify;    c.event = winId();    c.window = winId();    c.x = x();    c.y = y();    c.width = width();    c.height = height();    c.border_width = 0;    XSendEvent( qt_xdisplay(), c.event, TRUE, NoEventMask, (XEvent*)&c );    XtMoveWidget( xtw, x(), y() );}/*!\reimp */void QXtWidget::resizeEvent( QResizeEvent* ){    if ( xtparent || !xtw )	return;    XtWidgetGeometry preferred;    (void ) XtQueryGeometry( xtw, 0, &preferred );    XConfigureEvent c;    c.type = ConfigureNotify;    c.event = winId();    c.window = winId();    c.x = x();    c.y = y();    c.width = width();    c.height = height();    c.border_width = 0;    XSendEvent( qt_xdisplay(), c.event, TRUE, NoEventMask, (XEvent*)&c );    XtResizeWidget( xtw, width(), height(), preferred.border_width );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -