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

📄 help.cpp

📁 Qt/Embedded是一个多平台的C++图形用户界面应用程序框架
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000 Trolltech AS.  All rights reserved.**** This file is part of Qt Designer.**** 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 <qvariant.h>  // HP-UX compiler needs this here#include "help.h"#include "helpdialogimpl.h"#include "qaction.h"#include "pixmapchooser.h"#include "mainwindow.h"#include <qpixmap.h>#include <qpopupmenu.h>#if defined(HAVE_KDE)#include <kmenubar.h>#include <ktoolbar.h>#else#include <qmenubar.h>#include <qtoolbar.h>#endif#include <qiconset.h>#include <qstylesheet.h>#include <qprinter.h>#include <qsimplerichtext.h>#include <qpaintdevicemetrics.h>#include <qtextbrowser.h>#include <qmime.h>#include <qurl.h>#include <qtextstream.h>#include <qmessagebox.h>#include <stdlib.h>class TextBrowser : public QTextBrowser{public:    TextBrowser( QWidget *parent = 0, const char *name = 0 ) : QTextBrowser( parent, name ) {}    void setSource( const QString &name ) {	QUrl u( context(), name );	if ( !u.isLocalFile() ) {	    QMessageBox::information( this, tr( "Help" ), tr( "Can't load and display non-local file\n"							      "%1" ).arg( name ) );	    return;	}	QTextBrowser::setSource( name );    }};static QIconSet createIconSet( const QString &name ){    QIconSet ic( PixmapChooser::loadPixmap( name, PixmapChooser::Small ) );    ic.setPixmap( PixmapChooser::loadPixmap( name, PixmapChooser::Disabled ), QIconSet::Small, QIconSet::Disabled );    return ic;}Help::Help( const QString& home, MainWindow* parent, const char *name )#if defined(HAVE_KDE)    : KMainWindow( 0, name, WType_TopLevel | WDestructiveClose | WGroupLeader ),#else    : QMainWindow( 0, name, WType_TopLevel | WDestructiveClose | WGroupLeader ),#endif      mainWindow( parent ), helpDialog( 0 ){    bookmarkMenu = 0;    browser = new TextBrowser( this );    browser->mimeSourceFactory()->setFilePath( home );    browser->setFrameStyle( QFrame::Panel | QFrame::Sunken );    browser->mimeSourceFactory()->addFilePath( QString( getenv( "QTDIR" ) ) + "/tools/designer/manual" );    browser->mimeSourceFactory()->addFilePath( QString( getenv( "QTDIR" ) ) + "/doc/html/designer" );    browser->mimeSourceFactory()->addFilePath( parent->documentationPath() );    connect( browser, SIGNAL( textChanged() ),	     this, SLOT( textChanged() ) );    setCentralWidget( browser );#if defined(HAVE_KDE)    toolbar = new KToolBar( this );#else    toolbar = new QToolBar( this );#endif    addToolBar( toolbar, tr( "Tools" ) );    setupFileActions();    setupGoActions();    setupBookmarkMenu();    resize( 750,700 );    setToolBarsMovable( FALSE );}void Help::setupFileActions(){    QPopupMenu* menu = new QPopupMenu( this );    menuBar()->insertItem( tr( "&File" ), menu );    QAction *a;    a = new QAction( tr( "Print" ), createIconSet( "print.xpm" ), tr( "&Print" ), CTRL + Key_P, this );    a->addTo( menu );    a->addTo( toolbar );    connect( a, SIGNAL( activated() ), this, SLOT( filePrint() ) );    a = new QAction( tr( "Close" ), tr( "&Close" ), 0, this );    a->addTo( menu );    connect( a, SIGNAL( activated() ), this, SLOT( close() ) );}void Help::setupGoActions(){    QPopupMenu* menu = new QPopupMenu( this );    menuBar()->insertItem( tr( "&Go" ), menu );    QAction *a;    a = new QAction( tr( "Home" ), createIconSet( "home.xpm" ), ( "&Home" ), ALT + Key_Home, this );    a->addTo( menu );    a->addTo( toolbar );    connect( a, SIGNAL( activated() ), this, SLOT( goHome() ) );    a = new QAction( tr( "Qt Reference Documentation" ), createIconSet( "customwidget.xpm" ),		     ( "&Qt Reference Documentation" ), ALT + SHIFT + Key_Home, this );    a->addTo( menu );    a->addTo( toolbar );    connect( a, SIGNAL( activated() ), this, SLOT( goQt() ) );    menu->insertSeparator();    a = new QAction( tr( "Backward" ), createIconSet( "left.xpm" ), ( "&Backward" ), ALT + Key_Left, this );    a->addTo( menu );    a->addTo( toolbar );    connect( a, SIGNAL( activated() ), browser, SLOT( backward() ) );    connect( browser, SIGNAL( backwardAvailable( bool ) ), a, SLOT( setEnabled( bool ) ) );    a = new QAction( tr( "Forward" ), createIconSet( "right.xpm" ), tr( "&Forward" ), ALT + Key_Right, this );    a->addTo( menu );    a->addTo( toolbar );    connect( a, SIGNAL( activated() ), browser, SLOT( forward() ) );    connect( browser, SIGNAL( forwardAvailable( bool ) ), a, SLOT( setEnabled( bool ) ) );    menu->insertSeparator();    a = new QAction( tr( "Topics/Index" ), createIconSet( "help.xpm" ), tr( "&Topics/Index..." ), CTRL + Key_T, this );    a->addTo( menu );    a->addTo( toolbar );    connect( a, SIGNAL( activated() ), this, SLOT( goTopics() ) );}void Help::setSource( const QString& s ){    browser->setSource( s );}void Help::textChanged(){    if ( browser->documentTitle().isNull() )	setCaption( tr( "Help: " ) + browser->context() );    else	setCaption( tr( "Help: " ) + browser->documentTitle() );}Help::~Help(){}void Help::filePrint(){    QPrinter printer;    printer.setFullPage(TRUE);    if ( printer.setup() ) {	QPainter p( &printer );	QPaintDeviceMetrics metrics(p.device());	int dpix = metrics.logicalDpiX();	int dpiy = metrics.logicalDpiY();	const int margin = 72; // pt	QRect body(margin*dpix/72, margin*dpiy/72,		   metrics.width()-margin*dpix/72*2,		   metrics.height()-margin*dpiy/72*2 );	QFont font("times", 10);	QSimpleRichText richText( browser->text(), font, browser->context(), browser->styleSheet(),				  browser->mimeSourceFactory(), body.height() );	richText.setWidth( &p, body.width() );	QRect view( body );	int page = 1;	do {	    richText.draw( &p, body.left(), body.top(), view, colorGroup() );	    view.moveBy( 0, body.height() );	    p.translate( 0 , -body.height() );	    p.setFont( font );	    p.drawText( view.right() - p.fontMetrics().width( QString::number(page) ),			view.bottom() + p.fontMetrics().ascent() + 5, QString::number(page) );	    if ( view.top()  >= richText.height() )		break;	    printer.newPage();	    page++;	} while (TRUE);    }}void Help::goTopics(){    if ( !helpDialog ) {	helpDialog  = new HelpDialog( this, mainWindow, this );	connect( helpDialog, SIGNAL( showLink( const QString &, const QString & ) ),		 this, SLOT( showLink( const QString &, const QString & ) ) );    }    helpDialog->show();    helpDialog->raise();}void Help::showLink( const QString &link, const QString &title ){    browser->setCaption( title );    browser->setSource( link );}void Help::setupBookmarkMenu(){    if ( !helpDialog ) {	helpDialog  = new HelpDialog( this, mainWindow, this );	connect( helpDialog, SIGNAL( showLink( const QString &, const QString & ) ),		 this, SLOT( showLink( const QString &, const QString & ) ) );    }    if ( !bookmarkMenu ) {	bookmarkMenu = new QPopupMenu( this );	menuBar()->insertItem( tr( "&Bookmarks" ), bookmarkMenu );	connect( bookmarkMenu, SIGNAL( activated( int ) ),		 this, SLOT( showBookmark( int ) ) );    }    bookmarkMenu->clear();    bookmarks.clear();    bookmarkMenu->insertItem( tr( "&Add Bookmark" ), helpDialog, SLOT( addBookmark() ) );    QFile f( QDir::homeDirPath() + "/.designer/bookmarks" );    if ( !f.open( IO_ReadOnly ) )	return;    QTextStream ts( &f );    bookmarkMenu->insertSeparator();    while ( !ts.atEnd() ) {	QString title = ts.readLine();	QString link = ts.readLine();	bookmarks.insert( bookmarkMenu->insertItem( title ), link );    }}void Help::showBookmark( int id ){    if ( bookmarks.find( id ) != bookmarks.end() )	showLink( *bookmarks.find( id ), bookmarkMenu->text( id ) );}void Help::goHome(){    showLink( "book1.html", tr( "Home" ) );}void Help::goQt(){    showLink( "index.html", tr( "Qt Reference Documentation" ) );}

⌨️ 快捷键说明

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