在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Qt 图形界面开发 → LibreCAD相关源码

LibreCAD相关源码

Qt 图形界面开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:13.58M
  • 下载次数:60
  • 浏览次数:911
  • 发布时间:2018-03-27
  • 实例类别:Qt 图形界面开发
  • 发 布 人:徐小哥
  • 文件格式:.rar
  • 所需积分:2
 相关标签: cad LibreCAD

实例介绍

【实例简介】CAD软件
【实例截图】

【核心代码】


/****************************************************************************
**
** This file is part of the LibreCAD project, a 2D CAD program
**
** Copyright (C) 2015-2016 ravas (github.com/r-a-v-a-s)
** Copyright (C) 2010 R. van Twisk (librecad@rvt.dds.nl)
** Copyright (C) 2001-2003 RibbonSoft. All rights reserved.
**
** 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 gpl-2.0.txt included in the
** packaging of this file.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
**
** This copyright notice MUST APPEAR in all copies of the script!
**
**********************************************************************/
#include <clocale>
#include "main.h"

#include <QDebug>
#include <QApplication>
#include <QSplashScreen>
#include <QSettings>
#include <QMessageBox>

#include "rs_fontlist.h"
#include "rs_patternlist.h"
#include "rs_settings.h"
#include "rs_system.h"
#include "rs_fileio.h"
#include "qg_dlginitial.h"

#include "qc_applicationwindow.h"
#include "rs_debug.h"

/**
 * Main. Creates Application window.
 */
int main(int argc, char** argv)
{
 QT_REQUIRE_VERSION(argc, argv, "5.2.1");

 RS_DEBUG->setLevel(RS_Debug::D_WARNING);

 QApplication app(argc, argv);
 QCoreApplication::setOrganizationName("LibreCAD");
 QCoreApplication::setApplicationName("LibreCAD");
 QCoreApplication::setApplicationVersion(XSTR(LC_VERSION));

 QSettings settings;

 bool first_load = settings.value("Startup/FirstLoad", 1).toBool();

 const QString lpDebugSwitch0("-d"),lpDebugSwitch1("--debug") ;
 const QString help0("-h"), help1("--help");
 bool allowOptions=true;
 QList<int> argClean;
 for (int i=0; i<argc; i  )
 {
 QString argstr(argv[i]);
 if(allowOptions&&QString::compare("--", argstr)==0)
 {
 allowOptions=false;
 continue;
 }
 if (allowOptions && (help0.compare(argstr, Qt::CaseInsensitive)==0 ||
 help1.compare(argstr, Qt::CaseInsensitive)==0 ))
 {
 qDebug()<<"librecad::usage: <options> <dxf file>";
 qDebug()<<"-h, --help\tdisplay this message";
 qDebug()<<"";
 qDebug()<<" --help\tdisplay this message";
 qDebug()<<"-d, --debug <level>";
 RS_DEBUG->print( RS_Debug::D_NOTHING, "possible debug levels:");
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Nothing", RS_Debug::D_NOTHING);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Critical", RS_Debug::D_CRITICAL);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Error", RS_Debug::D_ERROR);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Warning", RS_Debug::D_WARNING);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Notice", RS_Debug::D_NOTICE);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Informational", RS_Debug::D_INFORMATIONAL);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Debugging", RS_Debug::D_DEBUGGING);
 exit(0);
 }
 if ( allowOptions&& (argstr.startsWith(lpDebugSwitch0, Qt::CaseInsensitive) ||
 argstr.startsWith(lpDebugSwitch1, Qt::CaseInsensitive) ))
 {
 argClean<<i;

 // to control the level of debugging output use --debug with level 0-6, e.g. --debug3
 // for a list of debug levels use --debug?
 // if no level follows, the debugging level is set
 argstr.remove(QRegExp("^" lpDebugSwitch0));
 argstr.remove(QRegExp("^" lpDebugSwitch1));
 char level;
 if(argstr.size()==0)
 {
 if(i 1<argc)
 {
 if(QRegExp("\\d*").exactMatch(argv[i 1]))
 {
  i;
 qDebug()<<"reading "<<argv[i]<<" as debugging level";
 level=argv[i][0];
 argClean<<i;
 }
 else
 level='3';
 }
 else
 level='3'; //default to D_WARNING
 }
 else
 level=argstr.toStdString()[0];

 switch(level)
 {
 case '?' :
 RS_DEBUG->print( RS_Debug::D_NOTHING, "possible debug levels:");
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Nothing", RS_Debug::D_NOTHING);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Critical", RS_Debug::D_CRITICAL);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Error", RS_Debug::D_ERROR);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Warning", RS_Debug::D_WARNING);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Notice", RS_Debug::D_NOTICE);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Informational", RS_Debug::D_INFORMATIONAL);
 RS_DEBUG->print( RS_Debug::D_NOTHING, " %d Debugging", RS_Debug::D_DEBUGGING);
 return 0;

 case '0'   RS_Debug::D_NOTHING :
 RS_DEBUG->setLevel( RS_Debug::D_NOTHING);
  i;
 break;

 case '0'   RS_Debug::D_CRITICAL :
 RS_DEBUG->setLevel( RS_Debug::D_CRITICAL);
  i;
 break;

 case '0'   RS_Debug::D_ERROR :
 RS_DEBUG->setLevel( RS_Debug::D_ERROR);
  i;
 break;

 case '0'   RS_Debug::D_WARNING :
 RS_DEBUG->setLevel( RS_Debug::D_WARNING);
  i;
 break;

 case '0'   RS_Debug::D_NOTICE :
 RS_DEBUG->setLevel( RS_Debug::D_NOTICE);
  i;
 break;

 case '0'   RS_Debug::D_INFORMATIONAL :
 RS_DEBUG->setLevel( RS_Debug::D_INFORMATIONAL);
  i;
 break;

 case '0'   RS_Debug::D_DEBUGGING :
 RS_DEBUG->setLevel( RS_Debug::D_DEBUGGING);
  i;
 break;

 default :
 RS_DEBUG->setLevel(RS_Debug::D_DEBUGGING);
 break;
 }
 }
 }
 RS_DEBUG->print("param 0: %s", argv[0]);

 QFileInfo prgInfo( QFile::decodeName(argv[0]) );
 QString prgDir(prgInfo.absolutePath());
 RS_SETTINGS->init(app.organizationName(), app.applicationName());
 RS_SYSTEM->init(app.applicationName(), app.applicationVersion(), XSTR(QC_APPDIR), prgDir);

 // parse command line arguments that might not need a launched program:
 QStringList fileList = handleArgs(argc, argv, argClean);

 QString unit = settings.value("Defaults/Unit", "Invalid").toString();

 // show initial config dialog:
 if (first_load)
 {
 RS_DEBUG->print("main: show initial config dialog..");
 QG_DlgInitial di(nullptr);
 QPixmap pxm(":/main/intro_librecad.png");
 di.setPixmap(pxm);
 if (di.exec())
 {
 RS_SETTINGS->beginGroup("/Defaults");
 unit = RS_SETTINGS->readEntry("/Unit", "None");
 RS_SETTINGS->endGroup();
 }
 RS_DEBUG->print("main: show initial config dialog: OK");
 }

 auto splash = new QSplashScreen;

 bool show_splash = settings.value("Startup/ShowSplash", 1).toBool();

 if (show_splash)
 {
 QPixmap pixmap(":/main/splash_librecad.png");
 splash->setPixmap(pixmap);
 splash->setAttribute(Qt::WA_DeleteOnClose);
 splash->show();
 splash->showMessage(QObject::tr("Loading.."),
 Qt::AlignRight|Qt::AlignBottom, Qt::black);
 app.processEvents();
 RS_DEBUG->print("main: splashscreen: OK");
 }

 RS_DEBUG->print("main: init fontlist..");
 RS_FONTLIST->init();
 RS_DEBUG->print("main: init fontlist: OK");

 RS_DEBUG->print("main: init patternlist..");
 RS_PATTERNLIST->init();
 RS_DEBUG->print("main: init patternlist: OK");

 RS_DEBUG->print("main: loading translation..");

 settings.beginGroup("Appearance");
 QString lang = settings.value("Language", "en").toString();
 QString langCmd = settings.value("LanguageCmd", "en").toString();
 settings.endGroup();

 RS_SYSTEM->loadTranslation(lang, langCmd);
 RS_DEBUG->print("main: loading translation: OK");

 RS_DEBUG->print("main: creating main window..");
 QC_ApplicationWindow appWin;
 RS_DEBUG->print("main: setting caption");
 appWin.setWindowTitle(app.applicationName());

 RS_DEBUG->print("main: show main window");

 settings.beginGroup("Geometry");
 int windowWidth = settings.value("WindowWidth", 1024).toInt();
 int windowHeight = settings.value("WindowHeight", 1024).toInt();
 int windowX = settings.value("WindowX", 32).toInt();
 int windowY = settings.value("WindowY", 32).toInt();
 settings.endGroup();

 settings.beginGroup("Defaults");
 if( !settings.contains("UseQtFileOpenDialog")) {
#ifdef Q_OS_LINUX
 // on Linux don't use native file dialog
 // because of case insensitive filters (issue #791)
 settings.setValue("UseQtFileOpenDialog", QVariant(1));
#else
 settings.setValue("UseQtFileOpenDialog", QVariant(0));
#endif
 }
 settings.endGroup();

 if (!first_load)
 appWin.resize(windowWidth, windowHeight);

 appWin.move(windowX, windowY);

 bool maximize = settings.value("Startup/Maximize", 0).toBool();

 if (maximize || first_load)
 appWin.showMaximized();
 else
 appWin.show();

 RS_DEBUG->print("main: set focus");
 appWin.setFocus();
 RS_DEBUG->print("main: creating main window: OK");

 if (show_splash)
 {
 RS_DEBUG->print("main: updating splash");
 splash->raise();
 splash->showMessage(QObject::tr("Loading..."),
 Qt::AlignRight|Qt::AlignBottom, Qt::black);
 RS_DEBUG->print("main: processing events");
 qApp->processEvents();
 RS_DEBUG->print("main: updating splash: OK");
 }

 // Set LC_NUMERIC so that entering numeric values uses . as the decimal separator
 setlocale(LC_NUMERIC, "C");

 RS_DEBUG->print("main: loading files..");
 bool files_loaded = false;
 for (QStringList::Iterator it = fileList.begin(); it != fileList.end();  it )
 {
 if (show_splash)
 {
 splash->showMessage(QObject::tr("Loading File %1..")
 .arg(QDir::toNativeSeparators(*it)),
 Qt::AlignRight|Qt::AlignBottom, Qt::black);
 qApp->processEvents();
 }
 appWin.slotFileOpen(*it, RS2::FormatUnknown);
 files_loaded = true;
 }
 RS_DEBUG->print("main: loading files: OK");

 if (!files_loaded)
 {
 appWin.slotFileNewNew();
 }

 if (show_splash)
 splash->finish(&appWin);
 else
 delete splash;

 if (first_load)
 settings.setValue("Startup/FirstLoad", 0);

 RS_DEBUG->print("main: entering Qt event loop");

 int return_code = app.exec();

 RS_DEBUG->print("main: exited Qt event loop");

 return return_code;
}


/**
 * Handles command line arguments that might not require a GUI.
 *
 * @return list of files to load on startup.
 */
QStringList handleArgs(int argc, char** argv, const QList<int>& argClean)
{
 RS_DEBUG->print("main: handling args..");
 QStringList ret;

 bool doexit = false;

 for (int i=1; i<argc; i  )
 {
 if(argClean.indexOf(i)>=0) continue;
 if (!QString(argv[i]).startsWith("-"))
 {
 QString fname = QDir::toNativeSeparators(
 QFileInfo(QFile::decodeName(argv[i])).absoluteFilePath());
 ret.append(fname);
 }
 else if (QString(argv[i])=="--exit")
 {
 doexit = true;
 }
 }
 if (doexit)
 {
 exit(0);
 }
 RS_DEBUG->print("main: handling args: OK");
 return ret;
}



标签: cad LibreCAD

实例下载地址

LibreCAD相关源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警