qgroundcontrol吧 关注:348贴子:514

QGC二次开发,求指点~

只看楼主收藏回复

开始接触地面站,全英语太费劲,求指点…从哪儿开始,或者在哪儿有这些讨论…


IP属地:北京来自Android客户端1楼2015-10-06 16:51回复
    同二次开发,但是现在连ubuntu都没装好的渣。。。求怎么装QGC


    IP属地:广东2楼2015-10-18 19:31
    收起回复
      QGeoServiceProviderFactoryQGC为静态插件工程
      qgroundcontrol为主工程


      IP属地:北京3楼2015-11-02 12:04
      回复
        main.cc
        1. 加载插件QGeoServiceProviderFactoryQGC
        2. 实例化QGCApplication * app
        3. 调用自带的初始化函数 app->_initCommon();


        IP属地:北京4楼2015-11-02 12:07
        回复
          QGCApplication.h
          QGCApplication.cc
          主程序的类定义
          代码量较大,只保留主要部分。
          1. 闪屏(splash screen) QPixmap splashImage(":/res/SplashScreen");L418
          窗口打开后关闭L426
          2. MainWindow* mainWindow主窗口,可能是框架。下一步查看。
          3. QGCApplication* qgcApp(void)???
          4. QGCApplication::_createSingletons(void)创建singleton,确定各个功能的启动顺序。(audio, linkmanager, uasManager, pluginManager, messageHandler, FactSystem, MavLink....)
          5. 设置主题,setStyle,默认":/res/styles/style-dark.css"
          其余功能未涉及,略过~


          IP属地:北京5楼2015-11-02 16:41
          收起回复
            MainWindow.h
            MainWindow.cc
            Implementation of class MainWindow
            主窗口类的实现
            构造函数:private
            (singleton 由MainWindow::_create方法创建)
            发送信号initStatusChanged-->splashscreen. showMessage
            设置用户界面
            设置窗口标题configureWindowName();【程序名+版本号+用户名+IP】
            设置centralWidget布局
            设置dock悬浮部件属性
            设置右下角停靠区域

            载入QML toolbar
            设置状态栏
            发送信号同上,显示信息。
            自动重连(if(_autoReconnect))
            设置节能模式(low power mode)if(_lowPowerMode)
            界面重绘
            判断是否全屏
            注册快捷键(Ctrl+1~5)对应5个功能界面


            IP属地:北京6楼2015-11-04 17:38
            收起回复
              LinkManager.h
              LinkManager.cc
              连接管理,组织物理链接。管理任意链接,分配匹配的协议,及协议转换。
              友元类:LinkManagerTest【测试单元】
              增加、移除、载入、保存 链接配置 link configuration setting
              挂起、恢复 new connections
              根据已有的配置(name、instance)新建链接
              SharedLinkInterface& sharedPointerForLink(LinkInterface* link);
              为当前链接返回智能指针;
              QMutex类提供的是线程之间的访问顺序化。
              QMutex的目的是保护一个对象、数据结构或者代码段,所以同一时间只有一个线程可以访问它。


              IP属地:北京9楼2015-11-13 16:27
              回复
                QSettings.h
                QSettings类提供“持久性”。相关的设置信息永久性保存,用于程序再次打开是加载。
                非持久性基于内存的数据结构,通常用QMap<QString, QVariant>。
                在Windows中,配置信息保存在【注册表】中,Mac---XML文件,Linux---INI文件。
                // 构造函数
                QSettings settings("MySoft", "Star Runner"); // 公司或组织名 // 应用程序名
                QCoreApplication::setOrganizationName("MySoft");
                QCoreApplication::setApplicationName("Star Runner");
                如果要在程序很多地方使用QSettings,用 QCoreApplication::setOrganizationName() 和
                QCoreApplication::setApplicationName() 然后用QSettings 的默认构造函数。这样,公司或组织
                名,应用程序名只要指定一次,QSettings settings 到处扔就行。
                QSettings 存储了一对键值( Key / value ) ,Key 是一个QString,Value是一个QVariant
                settings.setValue("editor/wrapMargin", 68); //添加一对键值// 通过"/" 分组
                settings.endGroup();
                void QSettings::beginWriteArray( constQString & prefix,int size =-1);
                添加分组,并链表化,读写分组
                要立既写入可以用sync() 函数


                IP属地:北京11楼2015-11-13 17:32
                收起回复

                  style-dark.css
                  默认的主题样式表
                  Qt的样式表文件与css不能完全匹配,在语法、属性等方面有区别。
                  选择符 {属性}
                  通配 * 所有窗口部件
                  类型 Qlabel 给定类的实例,包括其子类
                  属性 QComboBox[editable="true"] 所有可以编辑的给定类的实例
                  类 .QCheckBox 给定类的实例,而不包括其子类
                  标识 QRadioButton#red 对象名为red的给定类的对象
                  子孙对象 QWidget QToolButton 所有是QWidget的子孙对象的QToolButton对象
                  子对象 QWidget>QGroupBox 所有是QWidget的子对象的QGroupBox对象
                  ::,伪元素
                  :,伪状态
                  background背景,
                  padding填衬,
                  border边框
                  margin边距


                  IP属地:北京12楼2015-11-25 16:58
                  回复
                    我也在看代码,好难呀


                    13楼2015-12-28 17:48
                    收起回复
                      楼主编译源码成功了吗?求整个过程啊


                      14楼2016-01-10 20:46
                      收起回复
                        1、代码里多处发送下面的信号,对应的槽函数在哪里呀?
                        emit initStatusChanged


                        IP属地:广东15楼2016-02-12 23:58
                        收起回复
                          @sgyou2010
                          这个是信号声明,在MainWindow.h:
                          void initStatusChanged(const QString& message, int alignment, const QColor &color);
                          这个是连接函数,在MainWindow.cc:
                          connect(this, &MainWindow::initStatusChanged, splashScreen, &QSplashScreen::showMessage);
                          这个是槽函数,在qsplashscreen.h:
                          void showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black);
                          这个槽函数是Qt 的splashscreen自带的,路径是:..\Qt\5.4\msvc2013_opengl\include\QtWidgets


                          IP属地:北京16楼2016-02-13 11:42
                          收起回复
                            关于qCDebug()
                            我在代码里发现调用qCDebug()输出不了打印信息,而qDebug()可以。
                            这是官方文档对于qCDebug( category)的解释
                            qCDebug( category)
                            Returns an output stream for debug messages in the logging category category.
                            The macro expands to code that checks whether QLoggingCategory::isDebugEnabled() evaluates to true. If so, the stream arguments are processed and sent to the message handler.
                            该如何使能qCDebug( category)这样的调用可以输出调试信息呀
                            比如
                            下面的代码是输出不了打印信息的
                            qCDebug(SerialLinkLog) << "Create SerialLink " << config->portName() << config->baud() << config->flowControl() << config->parity() << config->dataBits() << config->stopBits();


                            IP属地:广东17楼2016-02-17 11:09
                            收起回复
                              我现在用的源码是V2.9.2版本的,现在也正是开始在 qgroundcontrol上进行二次开发,很多qml和C++的混合编程,看着蛋疼!希望大家以后多多指教。


                              IP属地:广东19楼2016-02-17 11:14
                              收起回复