рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдХреНрдпреВрдЯреА рдХреНрд╡рд┐рдХ рдХреЗ рд▓рд┐рдП рдХреНрдпреВрдПрдордПрд▓ рднрд╛рд╖рд╛ рдЖрдкрдХреЛ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдПрдирд┐рдореЗрдЯреЗрдб рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рдм рдХреБрдЫ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╕рдм рдХреБрдЫ QML рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ:
- QML / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдБрдЪрдирд╛
- рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд╣рд╛рдВ рджрдХреНрд╖рддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рдмрдбрд╝реЗ рдпрд╛ рдЬрдЯрд┐рд▓ рдЧреИрд░-рдШреЛрд╖рдгрд╛рддреНрдордХ рдХреЛрдб рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдердХрд╛рдК рд╣реЛрдВрдЧреЗ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, Qt QML рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ C ++ рдХреЛрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг Qt 5 рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ Qt Quick рдХреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо Qt 5.1.0 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди
C ++ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдХрджрдо, рдЗрд╕рдХреЗ рдЧреБрдг, рд╡рд┐рдзрд┐рдпреЛрдВ, рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рд╕реНрд▓реЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде, QML рд╡рд╛рддрд╛рд╡рд░рдг:
- QObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рдирдИ рдХрдХреНрд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
- Qt рдореЗрдЯрд╛-рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕рд┐рдЧреНрдирд▓, рд╕реНрд▓реЙрдЯ рдФрд░ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдореЗрдВ Q_OBJECT рдореИрдХреНрд░реЛ рд░рдЦрдХрд░ред
- Q_PROPERTY рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдг рдШреЛрд╖рд┐рдд рдХрд░рдирд╛
- Qt рдХреНрд╡рд┐рдХ рдЗрдВрдЬрди рдореЗрдВ рдЯрд╛рдЗрдк рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ qmlRegisterType () рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
рд╡рд┐рд╡рд░рдг Qt рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣реИрдВ,
MML C ++ QML рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдФрд░
QML рдХреЗ рд▓рд┐рдП C ++ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдирд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВред
SSH рдХреБрдВрдЬреА рдЬрдирд░реЗрдЯрд░
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ GUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / рдирд┐рдЬреА SSH рдХреБрдВрдЬреА рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ ssh-keygen рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬреЛрдбрд╝реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рдирдП Qt рдХреНрд╡рд┐рдХ рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдерд╛ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдХреБрдЫ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо QML рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде qmlscene рдЪрд▓рд╛рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХреБрдВрдЬреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ, рдЙрддреНрдкрдиреНрди рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо, рдФрд░, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЧреБрдкреНрдд рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬрд┐рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реА ++ рд╡рд░реНрдЧ
рдЕрдм, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо QML рд╕реЗ рд╕реАрдзреЗ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ C ++ (рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ) рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕реЗ
QML рдореЗрдВ рдПрдХ рдирдП
KeyGenerator рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдпрд╣
KeyGenerator.h рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
#ifndef KEYGENERATOR_H #define KEYGENERATOR_H #include <QObject> #include <QString> #include <QStringList> // Simple QML object to generate SSH key pairs by calling ssh-keygen. class KeyGenerator : public QObject { Q_OBJECT Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged) Q_PROPERTY(QStringList types READ types NOTIFY typesChanged) Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged) Q_PROPERTY(QString passphrase READ passphrase WRITE setPassphrase NOTIFY passphraseChanged) public: KeyGenerator(); ~KeyGenerator(); QString type(); void setType(const QString &t); QStringList types(); QString filename(); void setFilename(const QString &f); QString passphrase(); void setPassphrase(const QString &p); public slots: void generateKey(); signals: void typeChanged(); void typesChanged(); void filenameChanged(); void passphraseChanged(); void keyGenerated(bool success); private: QString _type; QString _filename; QString _passphrase; QStringList _types; }; #endif
рд╣рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ
QObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдХреА
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рд╣рдо рдЙрди рд╕рднреА рдЧреБрдгреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрдирд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ, рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕рдВрдХреЗрдд рдмрди рдЬрд╛рддреА рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЪрдпрдирд┐рдд рдХреБрдВрдЬреА рдкреНрд░рдХрд╛рд░, рд╕рднреА рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА SSH рдХреБрдВрдЬреА, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рдкрд╛рд╕рдлрд╝реНрд░реЗрдЬрд╝ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЧреБрдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЧрдгрдирд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред
рд╡реИрд╕реЗ, Qt 5.1.0 рдореЗрдВ
Q_PROPERTY рдореИрдХреНрд░реЛ рдХреА рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рддрд░реНрдХ рддрд░реНрдХ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╕рджрд╕реНрдп рд╣реИ рдЬреЛ рдЧреЗрдЯ рдФрд░ рд╕реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдо рд╕реЗрдЯрд┐рдВрдЧ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЗрдирд░реЗрдЯрдХреЗ
() рдирд╛рдо рд╕реЗ рдПрдХ рд╕реНрд▓реЙрдЯ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред рдпрд╣ рд╕рдм QML рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо QML рдХреЛ рдирд┐рдпрдорд┐рдд рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ
Q_INVOKABLE рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
рдЬрдирд░реЗрдЯ () рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рд╕реНрд▓реЙрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рддрдерд╛рдХрдерд┐рдд рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдирд┐рдЬреА рд╕рджрд╕реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред
C ++ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЕрдм,
KeyGenerator.cpp рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ
рджреЗрдЦрддреЗ рд╣реИрдВ ред рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ:
#include <QFile> #include <QProcess> #include "KeyGenerator.h" KeyGenerator::KeyGenerator() : _type("rsa"), _types{"dsa", "ecdsa", "rsa", "rsa1"} { } KeyGenerator::~KeyGenerator() { } QString KeyGenerator::type() { return _type; } void KeyGenerator::setType(const QString &t) { // Check for valid type. if (!_types.contains(t)) return; if (t != _type) { _type = t; emit typeChanged(); } } QStringList KeyGenerator::types() { return _types; } QString KeyGenerator::filename() { return _filename; } void KeyGenerator::setFilename(const QString &f) { if (f != _filename) { _filename = f; emit filenameChanged(); } } QString KeyGenerator::passphrase() { return _passphrase; } void KeyGenerator::setPassphrase(const QString &p) { if (p != _passphrase) { _passphrase = p; emit passphraseChanged(); } } void KeyGenerator::generateKey() { // Sanity check on arguments if (_type.isEmpty() or _filename.isEmpty() or (_passphrase.length() > 0 and _passphrase.length() < 5)) { emit keyGenerated(false); return; } // Remove key file if it already exists if (QFile::exists(_filename)) { QFile::remove(_filename); } // Execute ssh-keygen -t type -N passphrase -f keyfileq QProcess *proc = new QProcess; QString prog = "ssh-keygen"; QStringList args{"-t", _type, "-N", _passphrase, "-f", _filename}; proc->start(prog, args); proc->waitForFinished(); emit keyGenerated(proc->exitCode() == 0); delete proc; }
рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреБрдЫ рдЪрд░, рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, C ++ 11 рд╕реБрд╡рд┐рдзрд╛ _types рд╡рд░реНрдЧ рдХреЗ рдПрдХ рд╕рджрд╕реНрдп рдЪрд░ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрднреАрдХрд░рдг рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЬреЛ рдХрд┐
QStringList рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИред рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдЕрдм рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реНрдгрддрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИред
рдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХрд╛рд░реНрдп
() рдХреЗрд╡рд▓ рд╡рд░реНрдЧ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рджрд╕реНрдп рдЪрд░ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЙрдкрдпреБрдХреНрдд рдЪрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рдирдпрд╛ рдорд╛рди рдкреБрд░рд╛рдиреЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░реЗрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ MOC рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рдВрдХреЗрддреЛрдВ рдХреЛ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдХреЗрд╡рд▓ рд╕рд╣реА рд╕рдордп рдкрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЗрд╡рд▓ рдЧреИрд░-рддреБрдЪреНрдЫ рдкрджреНрдзрддрд┐ рдЬреЗрдирд░реЗрдЯрдХреЗ
() рд╕реНрд▓реЙрдЯ рд╣реИред рдпрд╣ рдХреБрдЫ рддрд░реНрдХ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рд╣рд░реА ssh-keygen рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП
QProcess рдмрдирд╛рддрд╛ рд╣реИред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рддреЗрдЬрд╝ рд╣реИ, рд╣рдо рдЗрд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ssh-keygen рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕рдВрдХреЗрдд рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЯрд╛рдЗрдк рдмреВрд▓рд┐рдпрди рдХрд╛ рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреБрдВрдЬреА рдкреАрдврд╝реА рд╕рдлрд▓ рдереА рдпрд╛ рдирд╣реАрдВред
QML рдХреЛрдб
рдЕрдм main.qml рдореЗрдВ QML рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░
рдбрд╛рд▓реЗрдВ :
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдереЛрдбрд╝рд╛ рдмрдбрд╝рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп рдЬреАрдпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХреЗ рд▓реЗрдЖрдЙрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдЗрд╕ рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо com.ics.demo рд╕рдВрд╕реНрдХрд░рдг 1.0 рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдЬрд▓реНрдж рд╣реА, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдХрд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдирдпрд╛ QML рдкреНрд░рдХрд╛рд░
KeyGenerator рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреА C ++ рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рддрдХ рдкрд╣реБрдБрдЪ, QML рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐
onKeyGenerated рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреВрд░реНрдг рдЬрд╛рдБрдЪ рдЕрддрд┐рд░рд┐рдХреНрдд рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдФрд░ рд╕рд╛рд░реНрдердХ рддреНрд░реБрдЯрд┐ рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдореБрдЦреНрдп рдкреАрдврд╝реА рдЕрд╕рдлрд▓ рд░рд╣реА (рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рднреА рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЖрд╡рд░рдг рд╣реИ рдЬреИрд╕реЗ рдХрд┐
qmlscene ред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ QML рдЗрдВрдЬрди рдореЗрдВ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЯрд╛рдЗрдк рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
qmlRegisterType<KeyGenerator>("com.ics.demo", 1, 0, "KeyGenerator");
рдпрд╣ C ++ рдкреНрд░рдХрд╛рд░
KeyGenerator рдХреЛ QML рдкреНрд░рдХрд╛рд░
KeyGenerator рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓
com.ics.demo рд╕рдВрд╕реНрдХрд░рдг 1.0 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рд╕реЗ QML рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЖрдк
QGuiApplication рдФрд░
QQuickView рдмрдирд╛рддреЗ рд╣реИрдВ ред рдЕрдм, рдХреНрдпреВрдЯреА рдХреНрд╡рд┐рдХ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдпрджрд┐ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рддрддреНрд╡
ApplicationWindow рдпрд╛
рд╡рд┐рдВрдбреЛ рд╣реИ ред рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣
qmlscene рдХрд╛ рдПрдХ рдЫреАрди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдоред
рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо,
main.cpp рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:
#include <QApplication> #include <QObject> #include <QQmlComponent> #include <QQmlEngine> #include <QQuickWindow> #include <QSurfaceFormat> #include "KeyGenerator.h" // Main wrapper program. // Special handling is needed when using Qt Quick Controls for the top window. // The code here is based on what qmlscene does. int main(int argc, char ** argv) { QApplication app(argc, argv); // Register our component type with QML. qmlRegisterType<KeyGenerator>("com.ics.demo", 1, 0, "KeyGenerator"); int rc = 0; QQmlEngine engine; QQmlComponent *component = new QQmlComponent(&engine); QObject::connect(&engine, SIGNAL(quit()), QCoreApplication::instance(), SLOT(quit())); component->loadUrl(QUrl("main.qml")); if (!component->isReady() ) { qWarning("%s", qPrintable(component->errorString())); return -1; } QObject *topLevel = component->create(); QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel); QSurfaceFormat surfaceFormat = window->requestedFormat(); window->setFormat(surfaceFormat); window->show(); rc = app.exec(); delete component; return rc; }
рдпрджрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ QML рдХреЗ рд╕рд╛рде C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк
qmlscene рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ C ++ рдХреЛрдб рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗрдЧрд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ C ++ рдореЗрдВ рдирдП QML рдШрдЯрдХ рдмрдирд╛рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЧреБрдг, рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ QML рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, C ++ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рднреА рдЧреИрд░-рддреБрдЪреНрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ QML рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдк рдпрд╣рд╛рдБ рд╕реЗ рд╕рднреА рдирдореВрдирд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред