玉兔远程控制 0.1.0-bate14
载入中...
搜索中...
未找到
参数组件

参数组件。 更多...

参数组件 的协作图:

class  CParameterWakeOnLan
 The wake on lan parameters. 更多...
class  CParameterWakeOnLanUI
 The wake on lan parameters UI 更多...
class  CParameterDesktop
 远程桌面的基础参数接口。包括基本参数(网络参数等)。 所有远程桌面插件的参数都应从此类派生。 更多...
class  CParameterGlobal
 全局参数 更多...
class  CParameterNet
 网络连接参数接口。此类仅在插件内有效。 其界面为 CParameterNetUI 更多...
class  CParameterNetUI
 The net parameter UI 更多...
class  CParameterPlugin
 插件的全局参数。 更多...
class  CParameterProxy
 The proxy parameters. 更多...
class  CParameterProxyUI
 The proxy parameter UI 更多...
class  CParameterUser
 用户名与验证方式。此类仅在插件内有效。它的界面是 CParameterUserUI 更多...
class  CParameterUserUI
 The user parameters UI 更多...

详细描述

参数组件。

  • 写一个参数组件:
    • 定义参数组件类(从 CParameter 或其派生类派生)。例如: CParameterUser
    • 增加参数组件界面,从 CParameterUI 派生。例如: CParameterUserUI 。 并重载下面函数:
      int SetParameter(CParameter* pParameter) override;
      int Accept() override;
      {
      m_pUser = qobject_cast<CParameterUser*>(pParameter);
      if(!m_pUser) {
      Q_ASSERT(m_pUser);
      return -1;
      }
      ui->leUser->setText(m_pUser->GetUser());
      ui->cbType->clear();
      for(auto t: m_pUser->GetType()) {
      ui->cbType->addItem(m_pUser->ConvertTypeToName(t), (int)t);
      }
      int index = ui->cbType->findData((int)m_pUser->GetUsedType());
      if(-1 == index) {
      qDebug(log) << "Forget set use type?";
      } else
      ui->cbType->setCurrentIndex(index);
      ui->cbType->setVisible(1 < m_pUser->GetType().length());
      ui->lbType->setVisible(1 < m_pUser->GetType().length());
      qDebug(log) << "CParameterUserUI::SetParameter:" << index;
      ui->lePassword->setText(m_pUser->GetPassword());
      ui->pbSave->setChecked(m_pUser->GetSavePassword());
      on_pbSave_clicked();
      auto plugPara = m_pUser->GetPluginParameters();
      if(plugPara)
      ui->pbSave->setEnabled(plugPara->GetSavePassword());
      SetPushButtonTooltip(ui->pbSave, tr("Save password"),
      tr("Menu: Tools→Settings→Plugin→Password→Enable Save password"));
      if(plugPara)
      ui->pbShow->setEnabled(plugPara->GetViewPassowrd());
      SetPushButtonTooltip(ui->pbShow, tr("View password"),
      tr("Menu: Tools→Settings→Plugin→Password→Enable view password"));
      ui->lePublicFile->setText(m_pUser->GetPublicKeyFile());
      ui->lePrivateFile->setText(m_pUser->GetPrivateKeyFile());
      ui->lePassphrase->setText(m_pUser->GetPassphrase());
      ui->pbSavePassphrase->setChecked(m_pUser->GetSavePassphrase());
      on_pbSavePassphrase_clicked();
      if(plugPara)
      ui->pbSavePassphrase->setEnabled(plugPara->GetSavePassword());
      SetPushButtonTooltip(ui->pbSavePassphrase, tr("Save password"),
      tr("Menu: Tools→Settings→Plugin→Password→Enable Save password"));
      if(plugPara)
      ui->pbShowPassphrase->setEnabled(plugPara->GetViewPassowrd());
      SetPushButtonTooltip(ui->pbShowPassphrase, tr("View password"),
      tr("Menu: Tools→Settings→Plugin→Password→Enable view password"));
      return 0;
      }
      {
      if(!m_pUser) return -1;
      m_pUser->SetUsedType((CParameterUser::TYPE)ui->cbType->currentData().toInt());
      m_pUser->SetUser(QString());
      m_pUser->SetPassword(QString());
      m_pUser->SetSavePassword(false);
      m_pUser->SetPublicKeyFile(QString());
      m_pUser->SetPrivateKeyFile(QString());
      m_pUser->SetPassphrase(QString());
      m_pUser->SetSavePassphrase(false);
      switch(m_pUser->GetUsedType())
      {
      case CParameterUser::TYPE::None:
      {
      break;
      }
      case CParameterUser::TYPE::OnlyPassword:
      {
      m_pUser->SetPassword(ui->lePassword->text());
      m_pUser->SetSavePassword(ui->pbSave->isChecked());
      break;
      }
      case CParameterUser::TYPE::UserPassword:
      {
      m_pUser->SetUser(ui->leUser->text());
      m_pUser->SetPassword(ui->lePassword->text());
      m_pUser->SetSavePassword(ui->pbSave->isChecked());
      break;
      }
      case CParameterUser::TYPE::PublicKey:
      {
      m_pUser->SetPublicKeyFile(ui->lePublicFile->text());
      m_pUser->SetPrivateKeyFile(ui->lePrivateFile->text());
      m_pUser->SetPassphrase(ui->lePassphrase->text());
      m_pUser->SetSavePassphrase(ui->pbSavePassphrase->isChecked());
      break;
      }
      default:
      m_pUser->SetUser(ui->leUser->text());
      m_pUser->SetPassword(ui->lePassword->text());
      m_pUser->SetSavePassword(ui->pbSave->isChecked());
      m_pUser->SetPublicKeyFile(ui->lePublicFile->text());
      m_pUser->SetPrivateKeyFile(ui->lePrivateFile->text());
      m_pUser->SetPassphrase(ui->lePassphrase->text());
      m_pUser->SetSavePassphrase(ui->pbSavePassphrase->isChecked());
      }
      return 0;
      }
  • 使用参数组件:
    • 在需要的地方实例化组件类。例如: CParameterNet
      CParameterUser m_User;
      CParameterNet::CParameterNet(CParameterOperate* parent, const QString &szPrefix)
      : CParameterOperate(parent, szPrefix)
      , m_nPort(0)
      , m_User(this)
      , m_szPrompt(tr("The host is empty. please set it"))
      , m_ShowUI(SHOW_UI::All)
      , m_EnableUI(SHOW_UI::All)
      {}
    • 在相应界面类
      • 初始化参数界面: CParameterNetUI::SetParameter 调用实例的 CParameterUserUI::SetParameter
        {
        if(!pParameter) return -1;
        m_pNet = qobject_cast<CParameterNet*>(pParameter);
        ui->leHost->setText(m_pNet->GetHost());
        ui->spPort->setValue(m_pNet->GetPort());
        // Call user UI SetParameter
        ui->wUser->SetParameter(&m_pNet->m_User);
        // Show ui
        CParameterNet::SHOW_UIS uis = m_pNet->GetShowUI();
        ui->lbHost->setVisible(uis & CParameterNet::SHOW_UI::Host);
        ui->leHost->setVisible(uis & CParameterNet::SHOW_UI::Host);
        ui->lbPort->setVisible(uis & CParameterNet::SHOW_UI::Port);
        ui->spPort->setVisible(uis & CParameterNet::SHOW_UI::Port);
        ui->wUser->setVisible(uis & CParameterNet::SHOW_UI::User);
        uis = m_pNet->GetEnableUI();
        ui->leHost->setEnabled(uis & CParameterNet::SHOW_UI::Host);
        ui->spPort->setEnabled(uis & CParameterNet::SHOW_UI::Port);
        ui->wUser->setEnabled(uis & CParameterNet::SHOW_UI::User);
        return 0;
        }
      • 检查参数的有效性: CParameterNetUI::CheckValidity
        bool CParameterNetUI::CheckValidity(bool validity)
        {
        if(validity && ui->leHost->text().isEmpty()) {
        QMessageBox::critical(this, tr("Error"),
        m_pNet->GetPrompt());
        qCritical(log) << "The host is empty" << m_pNet->GetPrompt();
        ui->leHost->setFocus();
        return false;
        }
        return true;
        }
      • 应用参数 CParameterNetUI::Accept 调用实例的 CParameterUserUI::Accept
        {
        int nRet = 0;
        m_pNet->SetHost(ui->leHost->text());
        m_pNet->SetPort(ui->spPort->value());
        // Accept user UI parameters
        nRet = ui->wUser->Accept();
        return nRet;
        }