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

📄 calculator.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000 Trolltech AS.  All rights reserved.**** This file is part of Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include <qtopia/qpeapplication.h>#include <qfont.h>#ifndef QT_NO_COMPONENT#include <qvaluelist.h>#include <qdir.h>#include <qtopia/config.h>#include <qtopia/pluginloader.h>#else#include "../../plugins/calculator/simple/simple.h"#endif#ifndef NEW_STYLE_STACK#include "doubleinstruction.h"#endif#include "calculator.h"#include "engine.h"QTOPIA_EXPORT Engine *systemEngine;// Calculator classCalculator::Calculator( QWidget * p, const char *n,WFlags fl) : QWidget (p, n, fl),	pluginWidgetStack(NULL){    QPEApplication::setInputMethodHint(this, QPEApplication::AlwaysOff);    setCaption(tr("Calculator"));    pluginList = new QValueList<CalculatorPlugin>();    modeBox = 0;    systemEngine = new Engine();    calculatorLayout = new QVBoxLayout(this);#ifdef NEW_STYLE_DISPLAY    LCD = new QLabel(this);#else    LCD = new QLineEdit(this);    LCD->setFocusPolicy(QWidget::NoFocus);    QFont f = LCD->font();    f.setPointSize(f.pointSize()*2);    LCD->setFont(f);    LCD->setReadOnly(TRUE);#endif    calculatorLayout->addWidget(LCD);    systemEngine->setDisplay(LCD);    // Load plugins#ifndef QT_NO_COMPONENT    if ( !pluginList->count() ) {	PluginLoader loader( "calculator" ); // No tr	QStringList list = loader.list();	QStringList::Iterator it;	for (it = list.begin(); it != list.end(); ++it) {	    CalculatorInterface *iface = 0;	    CalculatorPlugin plugin;	    if (loader.queryInterface(*it,IID_Calc, (QUnknownInterface **)&iface) == QS_OK) {		    plugin.interface = iface;		    pluginList->append(plugin);	    }	}    }    if (!pluginList->count()) {	LCD->setText(qApp->translate("Calculator","No plugins have been found"));    } else {	LCD->setAlignment(Qt::AlignRight);	QValueList<CalculatorPlugin>::Iterator current;	// Only one plugin, dont use the modeBox	if (pluginList->count() == 1) {	    current = pluginList->at(0);	    (*current).widget = (*current).interface->create(this);	    calculatorLayout->addWidget((*current).widget);	// Many plugins, use the modeBox	} else {	    modeBox = new QComboBox(this);	    calculatorLayout->addWidget(modeBox);	    pluginWidgetStack = new QWidgetStack(this);	    for (uint it2 = 0; it2 < pluginList->count(); it2++) {		current = pluginList->at(it2);		(*current).widget = (*current).interface->create(this);		modeBox->insertItem((*current).interface->pluginName());		pluginWidgetStack->addWidget((*current).widget,it2);	    }	    calculatorLayout->addWidget(pluginWidgetStack);	    connect (modeBox, SIGNAL(activated(int)), pluginWidgetStack, SLOT(raiseWidget(int)));	    Config config("calculator");	    config.setGroup("View");	    int lastView = config.readNumEntry("lastView", 0);	    if ( lastView > modeBox->count() || lastView < 0)		lastView = 0;	    modeBox->setCurrentItem( lastView );	    pluginWidgetStack->raiseWidget( lastView );	}    }#else    LCD->setAlignment(Qt::AlignRight);    FormSimple *si = new FormSimple(this);    calculatorLayout->addWidget(si);#endif}Calculator::~Calculator(){    if (modeBox) {	Config config("calculator");	config.setGroup("View");	config.writeEntry("lastView", modeBox->currentItem() );	delete modeBox;	delete pluginWidgetStack;    }    delete pluginList;    delete LCD;    delete systemEngine;    delete calculatorLayout;}void Calculator::keyPressEvent(QKeyEvent *e) {    int key = e->key();    switch (key) {	// backspace	case Qt::Key_Backtab:	case Qt::Key_Backspace:	case Qt::Key_Delete:	    systemEngine->delChar();	    break;	// evaluate	case Qt::Key_Enter:	case Qt::Key_Return:	case Qt::Key_Equal:	    systemEngine->evaluate();	    break;#ifndef NEW_STYLE_STACK	// basic mathematical keys	case Qt::Key_Plus:	    systemEngine->pushInstruction(new AddDoubleDouble());	    break;	case Qt::Key_Asterisk:	    systemEngine->pushInstruction(new MultiplyDoubleDouble());	    break;	case Qt::Key_Minus:	    systemEngine->pushInstruction(new SubtractDoubleDouble());	    break;	case Qt::Key_Slash:	    systemEngine->pushInstruction(new DivideDoubleDouble());	    break;#endif	default:	    QChar qc = e->text().at(0);	    if ( qc.isPrint() && !qc.isSpace() )		systemEngine->pushChar(qc.latin1());    }}

⌨️ 快捷键说明

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