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

📄 advanced.cpp

📁 嵌入式Qt下的一个计算器源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************** Copyright (C) 2000-2006 TROLLTECH ASA. All rights reserved.**** This file is part of the Phone Edition of the Qtopia Toolkit.**** Licensees holding a valid license agreement from Trolltech or any of its** authorized distributors may use this file in accordance with** the License Agreement provided with the Licensed Software.**** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for**   information about Trolltech's Commercial License Agreements.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.********** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifdef ENABLE_SCIENCE#include "advanced.h"#include "../doubleinstruction.h"#include <QLayout>#include <QPainter>#include <QRadioButton>#include <QDesktopWidget>#include <qtopia/qtopiaapplication.h>static void drawRootOfX(QPainter *p, int x, int y, int fontSize){    int fontSize05 = fontSize / 2;    p->drawText(x+fontSize05-2,y,"x");    p->drawLine(x-fontSize,y-fontSize05,x-fontSize05,y);    p->drawLine(x-fontSize05,y,x,y-fontSize);    p->drawLine(x,y-fontSize,x+fontSize+3,y-fontSize);} class PowerButton : public AdvancedButton {public:    PowerButton(QWidget *p = 0) : AdvancedButton(p) { }    void advancedDrawLabel( QPainter *p, int x, int y ) {	if ( inv ) {	    p->drawText(x - 5, y - fontSize05 - 2, "y");	    drawRootOfX(p, x + fontSize05 - 2, y + 2, fontSize10);	} else {	    p->drawText(x, y, "x");	    p->drawText(x + fontSize05, y - fontSize05, "y");	}    }};class SquareButton : public AdvancedButton {public:    SquareButton(QWidget *p = 0) : AdvancedButton(p) { }    void advancedDrawLabel( QPainter *p, int x, int y ) {	if ( inv ) {	    drawRootOfX(p, x, y, fontSize10);	} else {	    p->drawText(x, y, "x");	    p->drawText(x+fontSize05, y-fontSize05, "2");	}    }}; class LnButton : public AdvancedButton {public:    LnButton(QWidget *p = 0) : AdvancedButton(p) { }    void advancedDrawLabel( QPainter *p, int x, int y ) {	if ( inv ) {	    p->drawText(x, y, "e");	    p->drawText(x+fontSize05, y-fontSize05, "x");	} else {	    p->drawText(x, y, "Ln");	}    }};class OneOverButton : public AdvancedButton {public:    OneOverButton(QWidget *p = 0) : AdvancedButton(p) { }    void advancedDrawLabel( QPainter *p, int x, int y ) {	p->drawText(x + fontSize05, y - fontSize05, "1");	int between = y + (fontSize05 / 2) - fontSize05;	p->drawLine(x, between, x + fontSize10 + fontSize05, between);	p->drawText(x + fontSize05, y + fontSize05, "x");    }}; FormAdvanced::FormAdvanced(QWidget *parent) : DecimalInputWidget(parent), IsInverse(false){        setWhatsThis(tr("The scientific calculator plugin provides the most comprehensive "                 "interface. Many buttons have a second mode which can be activated via <b>INV</b>."));    setObjectName( "FormAdvanced" );        InputWidgetLayout = new QGridLayout(this);    InputWidgetLayout->setSpacing( 0 );    InputWidgetLayout->setMargin( 0 );        init(0, 0);}void FormAdvanced::init(int fromRow, int fromCol) {    QWidget * gridWidget = new QWidget(this);    QHBoxLayout *hlayout = new QHBoxLayout( gridWidget );    hlayout->setMargin( 0 );    hlayout->setSpacing( 0 );    gridWidget->setSizePolicy(sizePolicy());    degree = new QRadioButton(tr("Deg", "Degree mode"));    hlayout->addWidget( degree );    degree->setWhatsThis(tr("Calculate in degree mode"));    radians = new QRadioButton(tr("Rad", "Radian mode"));    hlayout->addWidget( radians );    radians->setWhatsThis(tr("Calculate in radian mode"));    gradians = new QRadioButton(tr("Gra", "Gradian mode"));    hlayout->addWidget( gradians );    gradians->setWhatsThis(tr("Calculate in gradian mode"));    degree->setChecked(true);    connect(degree, SIGNAL(toggled(bool)), this, SLOT(DegreeMode(bool)));    connect(radians, SIGNAL(toggled(bool)), this, SLOT(RadiansMode(bool)));    connect(gradians, SIGNAL(toggled(bool)), this, SLOT(GradiansMode(bool)));    QRect screenRect = QtopiaApplication::desktop()->availableGeometry();    bool portrait = screenRect.width() < screenRect.height();     if ( portrait) { //portrait        InputWidgetLayout->addWidget(gridWidget, fromRow, fromCol, 1, 4);        DecimalInputWidget::init(fromRow+6, fromCol);    } else { //landscape        InputWidgetLayout->addWidget(gridWidget, fromRow, fromCol, 1, 4);        DecimalInputWidget::init(fromRow, fromCol+4);    }        PBMPlus = new QPushButton;    PBMPlus->setSizePolicy(sizePolicy());    PBMPlus->setText(tr("M+"));    PBMR = new QPushButton;    PBMR->setSizePolicy(sizePolicy());    PBMR->setText(tr("MR"));    PBMC = new QPushButton;    PBMC->setSizePolicy(sizePolicy());    PBMC->setText(tr("MC"));    PBC = new QPushButton;    PBC->setSizePolicy(sizePolicy());    PBC->setText(tr("CE/C"));    if (portrait) {        InputWidgetLayout->addWidget(PBMPlus, fromRow+1, fromCol);        InputWidgetLayout->addWidget(PBMR, fromRow + 1, fromCol+1);        InputWidgetLayout->addWidget(PBMC, fromRow+1, fromCol+2);        InputWidgetLayout->addWidget(PBC, fromRow+1, fromCol+3);    } else {        InputWidgetLayout->addWidget(PBMPlus, fromRow+3, fromCol+3);        InputWidgetLayout->addWidget(PBMR, fromRow+4, fromCol+3);        InputWidgetLayout->addWidget(PBMC, fromRow+2, fromCol+3);        InputWidgetLayout->addWidget(PBC, fromRow+1, fromCol+3);    }        PBPi = new QPushButton;    PBPi->setSizePolicy(sizePolicy());    PBPi->setText(tr("Pi"));        PBE = new QPushButton;    PBE->setSizePolicy(sizePolicy());    PBE->setText(tr("e"));        PBSin = new QPushButton;    PBSin->setSizePolicy(sizePolicy());    PBSin->setText(tr("Sin"));        PBCos = new QPushButton;    PBCos->setSizePolicy(sizePolicy());    PBCos->setText(tr("Cos"));           PBTan = new QPushButton;    PBTan->setSizePolicy(sizePolicy());    PBTan->setText(tr("Tan"));    PBFactorial = new QPushButton;    PBFactorial->setSizePolicy(sizePolicy());    PBFactorial->setText(tr("n!"));    PBLn = (AdvancedButton*)new LnButton;    PBLn->setSizePolicy(sizePolicy());    PBInverse = new QPushButton;    PBInverse->setSizePolicy(sizePolicy());    PBInverse->setText(tr("INV", "inverse mode"));    PBSquare = (AdvancedButton*)new SquareButton;    PBSquare->setSizePolicy(sizePolicy());    PBPow = (AdvancedButton*)new PowerButton;    PBPow->setSizePolicy(sizePolicy());    PBOneOverX = (QPushButton*)new OneOverButton;    PBOneOverX->setSizePolicy(sizePolicy());    PBLog = new QPushButton;    PBLog->setSizePolicy(sizePolicy());    PBLog->setText(tr("Log"));    if (portrait) {        InputWidgetLayout->addWidget(PBPi, fromRow+2, fromCol+2);        InputWidgetLayout->addWidget(PBSin, fromRow+3, fromCol);        InputWidgetLayout->addWidget(PBCos, fromRow+3, fromCol+1);        InputWidgetLayout->addWidget(PBTan, fromRow+3, fromCol+2);        InputWidgetLayout->addWidget(PBFactorial, fromRow+2, fromCol);        InputWidgetLayout->addWidget(PBLn, fromRow+4, fromCol+3);        InputWidgetLayout->addWidget(PBInverse, fromRow+2, fromCol+3);        InputWidgetLayout->addWidget(PBE, fromRow+2, fromCol+1);        InputWidgetLayout->addWidget(PBSquare, fromRow+4, fromCol);        InputWidgetLayout->addWidget(PBPow, fromRow+4, fromCol+1);        InputWidgetLayout->addWidget(PBLog, fromRow+3, fromCol+3);        InputWidgetLayout->addWidget(PBOneOverX, fromRow+4, fromCol+2);    } else {        InputWidgetLayout->addWidget(PBPi, fromRow+1, fromCol+1);        InputWidgetLayout->addWidget(PBSin, fromRow+2, fromCol);        InputWidgetLayout->addWidget(PBCos, fromRow+2, fromCol+1);        InputWidgetLayout->addWidget(PBTan, fromRow+2, fromCol+2);        InputWidgetLayout->addWidget(PBFactorial, fromRow+4, fromCol+2);        InputWidgetLayout->addWidget(PBLn, fromRow+3, fromCol+1);        InputWidgetLayout->addWidget(PBInverse, fromRow+1, fromCol+2);        InputWidgetLayout->addWidget(PBE, fromRow+1, fromCol);

⌨️ 快捷键说明

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