📄 canvas-chart-example.html
字号:
#include "images/options_piechart.xpm"#include "images/options_verticalbarchart.xpm"const <a href="qstring.html">QString</a> WINDOWS_REGISTRY = "/QtExamples";const <a href="qstring.html">QString</a> APP_KEY = "/Chart/";<a name="f555"></a>ChartForm::ChartForm( const <a href="qstring.html">QString</a>& filename ) : <a href="qmainwindow.html">QMainWindow</a>( 0, 0, WDestructiveClose ){ <a href="qwidget.html#setIcon">setIcon</a>( QPixmap( options_piechart ) ); <a href="qaction.html">QAction</a> *fileNewAction; <a href="qaction.html">QAction</a> *fileOpenAction; <a href="qaction.html">QAction</a> *fileSaveAction; <a href="qaction.html">QAction</a> *fileSaveAsAction; <a href="qaction.html">QAction</a> *fileSaveAsPixmapAction; <a href="qaction.html">QAction</a> *filePrintAction; <a href="qaction.html">QAction</a> *fileQuitAction; <a href="qaction.html">QAction</a> *optionsSetDataAction; <a href="qaction.html">QAction</a> *optionsSetFontAction; <a href="qaction.html">QAction</a> *optionsSetOptionsAction; fileNewAction = new <a href="qaction.html">QAction</a>( "New Chart", QPixmap( file_new ), "&New", CTRL+Key_N, this, "new" );<a name="x2586"></a> <a href="qobject.html#connect">connect</a>( fileNewAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( fileNew() ) ); fileOpenAction = new <a href="qaction.html">QAction</a>( "Open Chart", QPixmap( file_open ), "&Open...", CTRL+Key_O, this, "open" ); <a href="qobject.html#connect">connect</a>( fileOpenAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( fileOpen() ) ); fileSaveAction = new <a href="qaction.html">QAction</a>( "Save Chart", QPixmap( file_save ), "&Save", CTRL+Key_S, this, "save" ); <a href="qobject.html#connect">connect</a>( fileSaveAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( fileSave() ) ); fileSaveAsAction = new <a href="qaction.html">QAction</a>( "Save Chart As", QPixmap( file_save ), "Save &As...", 0, this, "save as" ); <a href="qobject.html#connect">connect</a>( fileSaveAsAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( fileSaveAs() ) ); fileSaveAsPixmapAction = new <a href="qaction.html">QAction</a>( "Save Chart As Bitmap", QPixmap( file_save ), "Save As &Bitmap...", CTRL+Key_B, this, "save as bitmap" ); <a href="qobject.html#connect">connect</a>( fileSaveAsPixmapAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( fileSaveAsPixmap() ) ); filePrintAction = new <a href="qaction.html">QAction</a>( "Print Chart", QPixmap( file_print ), "&Print Chart...", CTRL+Key_P, this, "print chart" ); <a href="qobject.html#connect">connect</a>( filePrintAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( filePrint() ) ); optionsSetDataAction = new <a href="qaction.html">QAction</a>( "Set Data", QPixmap( options_setdata ), "Set &Data...", CTRL+Key_D, this, "set data" ); <a href="qobject.html#connect">connect</a>( optionsSetDataAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( optionsSetData() ) ); <a href="qactiongroup.html">QActionGroup</a> *chartGroup = new <a href="qactiongroup.html">QActionGroup</a>( this ); // Connected later<a name="x2591"></a> chartGroup-><a href="qactiongroup.html#setExclusive">setExclusive</a>( true ); optionsPieChartAction = new <a href="qaction.html">QAction</a>( "Pie Chart", QPixmap( options_piechart ), "&Pie Chart", CTRL+Key_I, chartGroup, "pie chart" );<a name="x2589"></a> optionsPieChartAction-><a href="qaction.html#setToggleAction">setToggleAction</a>( true ); optionsHorizontalBarChartAction = new <a href="qaction.html">QAction</a>( "Horizontal Bar Chart", QPixmap( options_horizontalbarchart ), "&Horizontal Bar Chart", CTRL+Key_H, chartGroup, "horizontal bar chart" ); optionsHorizontalBarChartAction-><a href="qaction.html#setToggleAction">setToggleAction</a>( true ); optionsVerticalBarChartAction = new <a href="qaction.html">QAction</a>( "Vertical Bar Chart", QPixmap( options_verticalbarchart ), "&Vertical Bar Chart", CTRL+Key_V, chartGroup, "Vertical bar chart" ); optionsVerticalBarChartAction-><a href="qaction.html#setToggleAction">setToggleAction</a>( true ); optionsSetFontAction = new <a href="qaction.html">QAction</a>( "Set Font", QPixmap( options_setfont ), "Set &Font...", CTRL+Key_F, this, "set font" ); <a href="qobject.html#connect">connect</a>( optionsSetFontAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( optionsSetFont() ) ); optionsSetOptionsAction = new <a href="qaction.html">QAction</a>( "Set Options", QPixmap( options_setoptions ), "Set &Options...", 0, this, "set options" ); <a href="qobject.html#connect">connect</a>( optionsSetOptionsAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( optionsSetOptions() ) ); fileQuitAction = new <a href="qaction.html">QAction</a>( "Quit", "&Quit", CTRL+Key_Q, this, "quit" ); <a href="qobject.html#connect">connect</a>( fileQuitAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ), this, SLOT( fileQuit() ) ); <a href="qtoolbar.html">QToolBar</a>* fileTools = new <a href="qtoolbar.html">QToolBar</a>( this, "file operations" );<a name="x2614"></a> fileTools-><a href="qtoolbar.html#setLabel">setLabel</a>( "File Operations" );<a name="x2587"></a> fileNewAction-><a href="qaction.html#addTo">addTo</a>( fileTools ); fileOpenAction-><a href="qaction.html#addTo">addTo</a>( fileTools ); fileSaveAction-><a href="qaction.html#addTo">addTo</a>( fileTools );<a name="x2613"></a> fileTools-><a href="qtoolbar.html#addSeparator">addSeparator</a>(); filePrintAction-><a href="qaction.html#addTo">addTo</a>( fileTools ); <a href="qtoolbar.html">QToolBar</a> *optionsTools = new <a href="qtoolbar.html">QToolBar</a>( this, "options operations" ); optionsTools-><a href="qtoolbar.html#setLabel">setLabel</a>( "Options Operations" ); optionsSetDataAction-><a href="qaction.html#addTo">addTo</a>( optionsTools ); optionsTools-><a href="qtoolbar.html#addSeparator">addSeparator</a>(); optionsPieChartAction-><a href="qaction.html#addTo">addTo</a>( optionsTools ); optionsHorizontalBarChartAction-><a href="qaction.html#addTo">addTo</a>( optionsTools ); optionsVerticalBarChartAction-><a href="qaction.html#addTo">addTo</a>( optionsTools ); optionsTools-><a href="qtoolbar.html#addSeparator">addSeparator</a>(); optionsSetFontAction-><a href="qaction.html#addTo">addTo</a>( optionsTools ); optionsTools-><a href="qtoolbar.html#addSeparator">addSeparator</a>(); optionsSetOptionsAction-><a href="qaction.html#addTo">addTo</a>( optionsTools ); fileMenu = new <a href="qpopupmenu.html">QPopupMenu</a>( this ); <a href="qmainwindow.html#menuBar">menuBar</a>()->insertItem( "&File", fileMenu ); fileNewAction-><a href="qaction.html#addTo">addTo</a>( fileMenu ); fileOpenAction-><a href="qaction.html#addTo">addTo</a>( fileMenu ); fileSaveAction-><a href="qaction.html#addTo">addTo</a>( fileMenu ); fileSaveAsAction-><a href="qaction.html#addTo">addTo</a>( fileMenu ); fileMenu-><a href="qmenudata.html#insertSeparator">insertSeparator</a>(); fileSaveAsPixmapAction-><a href="qaction.html#addTo">addTo</a>( fileMenu ); fileMenu-><a href="qmenudata.html#insertSeparator">insertSeparator</a>(); filePrintAction-><a href="qaction.html#addTo">addTo</a>( fileMenu ); fileMenu-><a href="qmenudata.html#insertSeparator">insertSeparator</a>(); fileQuitAction-><a href="qaction.html#addTo">addTo</a>( fileMenu ); fileMenu-><a href="qmenudata.html#insertSeparator">insertSeparator</a>(); optionsMenu = new <a href="qpopupmenu.html">QPopupMenu</a>( this ); <a href="qmainwindow.html#menuBar">menuBar</a>()->insertItem( "&Options", optionsMenu ); optionsSetDataAction-><a href="qaction.html#addTo">addTo</a>( optionsMenu ); optionsMenu-><a href="qmenudata.html#insertSeparator">insertSeparator</a>(); optionsPieChartAction-><a href="qaction.html#addTo">addTo</a>( optionsMenu ); optionsHorizontalBarChartAction-><a href="qaction.html#addTo">addTo</a>( optionsMenu ); optionsVerticalBarChartAction-><a href="qaction.html#addTo">addTo</a>( optionsMenu ); optionsMenu-><a href="qmenudata.html#insertSeparator">insertSeparator</a>(); optionsSetFontAction-><a href="qaction.html#addTo">addTo</a>( optionsMenu ); optionsMenu-><a href="qmenudata.html#insertSeparator">insertSeparator</a>(); optionsSetOptionsAction-><a href="qaction.html#addTo">addTo</a>( optionsMenu ); <a href="qmainwindow.html#menuBar">menuBar</a>()->insertSeparator(); <a href="qpopupmenu.html">QPopupMenu</a> *helpMenu = new <a href="qpopupmenu.html">QPopupMenu</a>( this ); <a href="qmainwindow.html#menuBar">menuBar</a>()->insertItem( "&Help", helpMenu ); helpMenu-><a href="qmenudata.html#insertItem">insertItem</a>( "&Help", this, SLOT(helpHelp()), Key_F1 ); helpMenu-><a href="qmenudata.html#insertItem">insertItem</a>( "&About", this, SLOT(helpAbout()) ); helpMenu-><a href="qmenudata.html#insertItem">insertItem</a>( "About &Qt", this, SLOT(helpAboutQt()) ); m_printer = 0; m_elements.resize( MAX_ELEMENTS ); <a href="qsettings.html">QSettings</a> settings;<a name="x2607"></a> settings.<a href="qsettings.html#insertSearchPath">insertSearchPath</a>( QSettings::Windows, WINDOWS_REGISTRY );<a name="x2609"></a> int windowWidth = settings.<a href="qsettings.html#readNumEntry">readNumEntry</a>( APP_KEY + "WindowWidth", 460 ); int windowHeight = settings.<a href="qsettings.html#readNumEntry">readNumEntry</a>( APP_KEY + "WindowHeight", 530 ); int windowX = settings.<a href="qsettings.html#readNumEntry">readNumEntry</a>( APP_KEY + "WindowX", 0 ); int windowY = settings.<a href="qsettings.html#readNumEntry">readNumEntry</a>( APP_KEY + "WindowY", 0 ); setChartType( ChartType( settings.<a href="qsettings.html#readNumEntry">readNumEntry</a>( APP_KEY + "ChartType", int(PIE) ) ) ); m_addValues = AddValuesType( settings.<a href="qsettings.html#readNumEntry">readNumEntry</a>( APP_KEY + "AddValues", int(NO) )); m_decimalPlaces = settings.<a href="qsettings.html#readNumEntry">readNumEntry</a>( APP_KEY + "Decimals", 2 ); m_font = QFont( "Helvetica", 18, QFont::Bold ); m_font.fromString(<a name="x2608"></a> settings.<a href="qsettings.html#readEntry">readEntry</a>( APP_KEY + "Font", m_font.toString() ) ); for ( int i = 0; i < MAX_RECENTFILES; ++i ) { <a href="qstring.html">QString</a> filename = settings.<a href="qsettings.html#readEntry">readEntry</a>( APP_KEY + "File" +<a name="x2612"></a> QString::<a href="qstring.html#number">number</a>( i + 1 ) );<a name="x2611"></a> if ( !filename.<a href="qstring.html#isEmpty">isEmpty</a>() ) m_recentFiles.push_back( filename ); } if ( m_recentFiles.count() ) updateRecentFilesMenu(); // Connect *after* we've set the chart type on so we don't call // drawElements() prematurely.<a name="x2590"></a> <a href="qobject.html#connect">connect</a>( chartGroup, SIGNAL( <a href="qactiongroup.html#selected">selected</a>(QAction*) ), this, SLOT( updateChartType(QAction*) ) ); <a href="qwidget.html#resize">resize</a>( windowWidth, windowHeight ); <a href="qwidget.html#move">move</a>( windowX, windowY ); m_canvas = new <a href="qcanvas.html">QCanvas</a>( this );<a name="x2593"></a> m_canvas-><a href="qcanvas.html#resize">resize</a>( <a href="qwidget.html#width">width</a>(), height() ); m_canvasView = new CanvasView( m_canvas, &m_elements, this ); <a href="qmainwindow.html#setCentralWidget">setCentralWidget</a>( m_canvasView ); m_canvasView-><a href="qwidget.html#show">show</a>(); if ( !filename.<a href="qstring.html#isEmpty">isEmpty</a>() ) load( filename ); else { init(); m_elements[0].set( 20, red, 14, "Red" ); m_elements[1].set( 70, cyan, 2, "Cyan", darkGreen ); m_elements[2].set( 35, blue, 11, "Blue" ); m_elements[3].set( 55, yellow, 1, "Yellow", darkBlue ); m_elements[4].set( 80, magenta, 1, "Magenta" ); drawElements(); } <a href="qmainwindow.html#statusBar">statusBar</a>()->message( "Ready", 2000 );}ChartForm::~ChartForm(){ delete m_printer;}void <a name="f556"></a>ChartForm::init(){ <a href="qwidget.html#setCaption">setCaption</a>( "Chart" ); m_filename = QString::null; m_changed = false; m_elements[0] = Element( Element::INVALID, red ); m_elements[1] = Element( Element::INVALID, cyan ); m_elements[2] = Element( Element::INVALID, blue ); m_elements[3] = Element( Element::INVALID, yellow ); m_elements[4] = Element( Element::INVALID, green ); m_elements[5] = Element( Element::INVALID, magenta ); m_elements[6] = Element( Element::INVALID, darkYellow ); m_elements[7] = Element( Element::INVALID, darkRed ); m_elements[8] = Element( Element::INVALID, darkCyan ); m_elements[9] = Element( Element::INVALID, darkGreen ); m_elements[10] = Element( Element::INVALID, darkMagenta ); m_elements[11] = Element( Element::INVALID, darkBlue ); for ( int i = 12; i < MAX_ELEMENTS; ++i ) { double x = (double(i) / MAX_ELEMENTS) * 360; int y = (int(x * 256) % 105) + 151; int z = ((i * 17) % 105) + 151; m_elements[i] = Element( Element::INVALID, QColor( int(x), y, z, QColor::Hsv ) ); }}void <a name="f557"></a>ChartForm::fileNew(){ if ( okToClear() ) { init(); drawElements(); }}void <a name="f558"></a>ChartForm::fileOpen(){ if ( !okToClear() ) return; <a href="qstring.html">QString</a> filename = QFileDialog::<a href="qfiledialog.html#getOpenFileName">getOpenFileName</a>( QString::null, "Charts (*.cht)", this, "file open", "Chart -- File Open" ); if ( !filename.<a href="qstring.html#isEmpty">isEmpty</a>() ) load( filename ); else <a href="qmainwindow.html#statusBar">statusBar</a>()->message( "File Open abandoned", 2000 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -