【重庆达内】我们的框架还是使用Qt Creator创建一个Gui Application工程。
简单的main()函数就不再赘述了,首先先来看看最终的运行结果:MainWindow的代码
mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QtGui>#include "shape.h"#include "paintwidget.h"class MainWindow : public QMainWindow{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);signals:void changeCurrentShape(Shape::Code newShape);private slots:void drawLineActionTriggered();void drawRectActionTriggered();};#endif // MAINWINDOW_Hmainwindow.cpp#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent){ QToolBar *bar = this->addToolBar("Tools"); QActionGroup *group = new QActionGroup(bar); QAction *drawLineAction = new QAction("Line", bar); drawLineAction->setIcon(QIcon(":/line.png")); drawLineAction->setToolTip(tr("Draw a line.")); drawLineAction->setStatusTip(tr("Draw a line.")); drawLineAction->setCheckable(true); drawLineAction->setChecked(true); group->addAction(drawLineAction); bar->addAction(drawLineAction); QAction *drawRectAction = new QAction("Rectangle", bar); drawRectAction->setIcon(QIcon(":/rect.png")); drawRectAction->setToolTip(tr("Draw a rectangle.")); drawRectAction->setStatusTip(tr("Draw a rectangle.")); drawRectAction->setCheckable(true); group->addAction(drawRectAction); bar->addAction(drawRectAction); QLabel *statusMsg = new QLabel; statusBar()->addWidget(statusMsg); PaintWidget *paintWidget = new PaintWidget(this); setCentralWidget(paintWidget); connect(drawLineAction, SIGNAL(triggered()), this, SLOT(drawLineActionTriggered())); connect(drawRectAction, SIGNAL(triggered()), this, SLOT(drawRectActionTriggered())); connect(this, SIGNAL(changeCurrentShape(Shape::Code)), paintWidget, SLOT(setCurrentShape(Shape::Code))); } void MainWindow::drawLineActionTriggered() { emit changeCurrentShape(Shape::Line); } void MainWindow::drawRectActionTriggered() { emit changeCurrentShape(Shape::Rect); } 应该说,从以往的学习中可以看出,这里的代码没有什么奇怪的了。我们在MainWindow类里面声明了一个信号,changeCurrentShape(Shape::Code),用于按钮按下后通知画图板。注意,QActio的triggered()信号是没有参数的,因此,我们需要在QAction的槽函数中重新emit我们自己定义的信号。构造函数里面创建了两个QAction,一个是 drawLineAction,一个是drawRectAction,分别用于绘制直线和矩形。MainWindow的中心组件是PainWidget,也就是我们的画图板。
QQ群:245219028
简单的main()函数就不再赘述了,首先先来看看最终的运行结果:MainWindow的代码
mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QtGui>#include "shape.h"#include "paintwidget.h"class MainWindow : public QMainWindow{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);signals:void changeCurrentShape(Shape::Code newShape);private slots:void drawLineActionTriggered();void drawRectActionTriggered();};#endif // MAINWINDOW_Hmainwindow.cpp#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent){ QToolBar *bar = this->addToolBar("Tools"); QActionGroup *group = new QActionGroup(bar); QAction *drawLineAction = new QAction("Line", bar); drawLineAction->setIcon(QIcon(":/line.png")); drawLineAction->setToolTip(tr("Draw a line.")); drawLineAction->setStatusTip(tr("Draw a line.")); drawLineAction->setCheckable(true); drawLineAction->setChecked(true); group->addAction(drawLineAction); bar->addAction(drawLineAction); QAction *drawRectAction = new QAction("Rectangle", bar); drawRectAction->setIcon(QIcon(":/rect.png")); drawRectAction->setToolTip(tr("Draw a rectangle.")); drawRectAction->setStatusTip(tr("Draw a rectangle.")); drawRectAction->setCheckable(true); group->addAction(drawRectAction); bar->addAction(drawRectAction); QLabel *statusMsg = new QLabel; statusBar()->addWidget(statusMsg); PaintWidget *paintWidget = new PaintWidget(this); setCentralWidget(paintWidget); connect(drawLineAction, SIGNAL(triggered()), this, SLOT(drawLineActionTriggered())); connect(drawRectAction, SIGNAL(triggered()), this, SLOT(drawRectActionTriggered())); connect(this, SIGNAL(changeCurrentShape(Shape::Code)), paintWidget, SLOT(setCurrentShape(Shape::Code))); } void MainWindow::drawLineActionTriggered() { emit changeCurrentShape(Shape::Line); } void MainWindow::drawRectActionTriggered() { emit changeCurrentShape(Shape::Rect); } 应该说,从以往的学习中可以看出,这里的代码没有什么奇怪的了。我们在MainWindow类里面声明了一个信号,changeCurrentShape(Shape::Code),用于按钮按下后通知画图板。注意,QActio的triggered()信号是没有参数的,因此,我们需要在QAction的槽函数中重新emit我们自己定义的信号。构造函数里面创建了两个QAction,一个是 drawLineAction,一个是drawRectAction,分别用于绘制直线和矩形。MainWindow的中心组件是PainWidget,也就是我们的画图板。
QQ群:245219028