#include <QtWidgets>
#include "flowchartdialog.h"
#include "diagramscene.h"
FlowChartDialog::FlowChartDialog(QWidget *parent) :
QDialog(parent)
{
this->setWindowFlags(Qt::Window);
initFlowChartDialog();
}
FlowChartDialog::~FlowChartDialog()
{
}
void FlowChartDialog::initFlowChartDialog()
{
//创建工具栏
createToolBar();
//创建工具箱
createToolBox();
//创建视图
m_view = new QGraphicsView(this);
m_scene = new DiagramScene(0, 0, 2000, 1000);
connect(m_scene, SIGNAL(itemInserted(DiagramItem*)), this, SLOT(onSceneItemInserted(DiagramItem*)));
m_view->setScene(m_scene);
m_view->setDragMode(QGraphicsView::RubberBandDrag);
QHBoxLayout *hLayout = new QHBoxLayout();
hLayout->addWidget(m_toolBox);
hLayout->addWidget(m_view);
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->addWidget(m_toolBar);
vLayout->addLayout(hLayout);
this->setLayout(vLayout);
}
void FlowChartDialog::createToolBar()
{
m_toolBar = new QToolBar(this);
m_fontBox = new QFontComboBox(this);
connect(m_fontBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(onFontFamilyChange(QString)));
m_toolBar->addWidget(m_fontBox);
m_fontSizeBox = new QComboBox(this);
m_toolBar->addWidget(m_fontSizeBox);
QFontDatabase fontDb;
foreach (int size, fontDb.standardSizes()) {
m_fontSizeBox->addItem(QString::number(size));
}
connect(m_fontSizeBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(onFontSizeChange(QString)));
m_actBold = new QAction("Bold", this);
m_actBold->setIcon(QIcon(":/images/bold.png"));
m_actBold->setCheckable(true);
connect(m_actBold, SIGNAL(triggered(bool)), this, SLOT(onFontStyleChange()));
m_toolBar->addAction(m_actBold);
m_actItalic = new QAction("Italic", this);
m_actItalic->setIcon(QIcon(":/images/italic.png"));
m_actItalic->setCheckable(true);
connect(m_actItalic, SIGNAL(triggered(bool)), this, SLOT(onFontStyleChange()));
m_toolBar->addAction(m_actItalic);
m_actUnderline = new QAction("Underline", this);
m_actUnderline->setIcon(QIcon(":/images/underline.png"));
m_actUnderline->setCheckable(true);
connect(m_actUnderline, SIGNAL(triggered(bool)), this, SLOT(onFontStyleChange()));
m_toolBar->addAction(m_actUnderline);
m_toolBar->addSeparator();
m_actFontColor = new QAction("Font Color", this);
m_actFontColor->setIcon(QIcon(":/images/fontcolor.png"));
connect(m_actFontColor, SIGNAL(triggered(bool)), this, SLOT(onFontColor()));
m_toolBar->addAction(m_actFontColor);
m_actLineColor = new QAction("Line Color", this);
m_actLineColor->setIcon(QIcon(":/images/linecolor.png"));
connect(m_actLineColor, SIGNAL(triggered(bool)), this, SLOT(onLineColor()));
m_toolBar->addAction(m_actLineColor);
m_toolBar->addSeparator();
m_actPointer = new QAction("Pointer", this);
m_actPointer->setIcon(QIcon(":/images/pointer.png"));
m_actPointer->setCheckable(true);
m_actPointer->setChecked(true);
connect(m_actPointer, SIGNAL(triggered(bool)), this, SLOT(onPointer()));
m_toolBar->addAction(m_actPointer);
m_actLinePointer = new QAction("Line Pointer", this);
m_actLinePointer->setIcon(QIcon(":/images/linepointer.png"));
m_actLinePointer->setCheckable(true);
connect(m_actLinePointer, SIGNAL(triggered(bool)), this, SLOT(onLinePointer()));
m_toolBar->addAction(m_actLinePointer);
}
void FlowChartDialog::createToolBox()
{
m_toolBox = new QToolBox();
m_toolBox->setFixedWidth(210);
m_toolBoxButtonGroup = new QButtonGroup(this);
connect(m_toolBoxButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(onToolBoxButtonGroup(int)));
QGridLayout *gLayout = new QGridLayout();
gLayout->addWidget(createCellWidget(tr("Conditional"), DiagramItem::Conditional), 0, 0);
gLayout->addWidget(createCellWidget(tr("Process"), DiagramItem::Step),0, 1);
gLayout->addWidget(createCellWidget(tr("Input/Output"), DiagramItem::Io), 1, 0);
gLayout->addWidget(createCellWidget(tr("Start/End"), DiagramItem::StartEnd), 1, 1);
gLayout->setRowStretch(2, 10);
QWidget *widget = new QWidget();
widget->setLayout(gLayout);
m_toolBox->addItem(widget, "Shapes");
}
QWidget *FlowChartDialog::createCellWidget(const QString &text, DiagramItem::DiagramType type)
{
DiagramItem item(type);
QIcon icon(item.getPixmap());
QToolButton *toolBtn = new QToolButton();
toolBtn->setIcon(icon);
toolBtn->setIconSize(QSize(50, 50));
toolBtn->setCheckable(true);
m_toolBoxButtonGroup->addButton(toolBtn, int(type));
QGridLayout *gLayout = new QGridLayout();
gLayout->addWidget(toolBtn, 0, 0, Qt::AlignHCenter);
gLayout->addWidget(new QLabel(text), 1, 0, Qt::AlignCenter);
QWidget *widget = new QWidget();
widget->setLayout(gLayout);
return widget;
}
void FlowChartDialog::onFontFamilyChange(const QString &/*family*/)
{
onFontStyleChange();
}
void FlowChartDialog::onFontSizeChange(const QString &/*fontSize*/)
{
onFontStyleChange();
}
void FlowChartDialog::onFontStyleChange()
{
QFont font = m_fontBox->currentFont();
font.setPointSize(m_fontSizeBox->currentText().toInt());
font.setBold(m_actBold->isChecked() ? QFont::Bold : QFont::Normal);
font.setItalic(m_actItalic->isChecked());
font.setUnderline(m_actUnderline->isChecked());
m_scene->setFont(font);
}
void FlowChartDialog::onFontColor()
{
}
void FlowChartDialog::onLineColor()
{
}
void FlowChartDialog::onPointer()
{
m_actPointer->setChecked(true);
m_actLinePointer->setChecked(false);
m_scene->setMode(DiagramScene::MoveItem);
}
void FlowChartDialog::onLinePointer()
{
m_actPointer->setChecked(false);
m_actLinePointer->setChecked(true);
m_scene->setMode(DiagramScene::InsertLine);
}
void FlowChartDialog::onToolBoxButtonGroup(int id)
{
QList<QAbstractButton*> buttons = m_toolBoxButtonGroup->buttons();
QAbstractButton *clickedButton = m_toolBoxButtonGroup->button(id);
foreach (QAbstractButton *button, buttons) {
if (clickedButton != button) {
button->setChecked(false);
}
}
m_scene->setMode(DiagramScene::InsertItem);
m_scene->setItemType(DiagramItem::DiagramType(id));
}
void FlowChartDialog::onSceneItemInserted(DiagramItem *item)
{
if (!item)
return;
m_toolBoxButtonGroup->button((int)item->getDiagramType())->setChecked(false);
if (m_actPointer->isChecked()) {
m_scene->setMode(DiagramScene::MoveItem);
}
else if (m_actLinePointer->isChecked()) {
m_scene->setMode(DiagramScene::InsertLine);
}
}
Qt实现流程示意图
2星 需积分: 46 160 浏览量
2019-08-08
14:08:09
上传
评论 8
收藏 12KB RAR 举报
wgj22068
- 粉丝: 10
- 资源: 47
最新资源
- 细胞的奇迹:吃出来的免疫力(美亚畅销书!作者的TED演讲播放量超300万次!《谷物大脑》作者、《三联生活周刊》推荐!吃下对的食物,改善你的... (Z-Library).azw3
- 智能手机产品拆解,使用mindmaster打开
- 11111111111111
- 统信系统ARM64依赖openssl-1.0.2版本的libssl.so.10和libcrypto.so.10文件
- 奥比中光python sdk
- 冯超楠17.py
- OCR识别-基于视觉注意力机制Attention实现的OCR识别算法-附项目源码-优质项目实战.zip
- Java 使用蒙特卡洛方法估算PI的近似值(源代码)
- main.cpp
- 电子木鱼小程序源码电子木鱼小程序源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈