рдпрд╣ рдкреЛрд╕реНрдЯ "
рд╕реНрдорд╛рд░реНрдЯ рдлреЛрди рдлреЙрд░ рд╕реНрдорд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ " рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреА рд╣реИ
рдкрд░рд┐рдЪрдп
рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ HTML5 рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рд╡рд┐рдХрд╛рд╕ рдлрд╝реЛрдХрд╕ рдзреАрд░реЗ-рдзреАрд░реЗ рд╡реЗрдм рдХреА рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рд▓рдЧрд╛ред рдпреЗ рд╕рд░рд▓ рд╡реЗрдм рд╕рд╛рдЗрдЯ рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреА рд╣реИрдВ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ HTML5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдордВрдЪ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдФрд░ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдирдИ рдПрдЪрдЯреАрдПрдордПрд▓ рдорд╛рдирдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдкреВрд░рд╛ рдвреЗрд░ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдХреБрдЫ рдХрд╛рд░реНрдп рдРрд╕реЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рджреЗрд╢реА рд╡рд┐рдХрд╛рд╕ рд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реА рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреБрдЫ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд░рд╣реА рд╣реИрдВред HTML5 рд╕реЗ рд╕рдВрдкрд░реНрдХ, рдХреИрд▓реЗрдВрдбрд░, рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЖрдпреЛрдЬрдХ рдФрд░ рдЕрдиреНрдп рддрдХ рдкрд╣реБрдВрдЪред рдлрд┐рд░ рд╕реЗ, рдпрджрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдЫ рдЧрдВрднреАрд░ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдзреАрдореА рдЬреЗрдПрд╕ рд╕реЗ рддреЗрдЬ рд╕реА ++ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ QtWebKit рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рджреЗрд╢реА рдХреЛрдб рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдХрдИ рддрдХрдиреАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ C ++ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛
- C ++ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛
- рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдореЗрдВ QWidget рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ C ++ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ HTML рдкреГрд╖реНрда рдкрд░ рдПрдХ рдирдпрд╛ JS рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдЕрдкрдиреА рдХрд┐рд╕реА рдПрдХ рдХрдХреНрд╖рд╛ рддрдХ рдкрд╣реБрдБрдЪ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред QtWebKit рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдореЗрдВ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╢рд░реНрдд рдХреЗ рд╕рд╛рде - рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдШрдЯрдХ рдореЗрдВ рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк DOM рдЯреНрд░реА рдФрд░ JS рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЯреНрд░реА рджреЛрдиреЛрдВ рдХреЛ рдХреНрд▓рд┐рдпрд░ рдХрд░рддреЗ рд╣реИрдВред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рдореЗрдВ рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛, рдХреНрдпреВрдЯреА рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдирдпрд╛ "рдХреНрдпреВрдЯреА рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди" рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд╛рдХреА рдЖрдкрдХреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╣реИред рдлрд┐рд░ рдлрд╛рд░реНрдо рдкрд░ QWebView рдШрдЯрдХ рдХреЛ рдЫреЛрдбрд╝реЗрдВ, .pro рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ
QT += webkit
рд╣реЗрдбрд░ рдореЗрдВ mainwindow.h рдПрдХ рдирд┐рдЬреА рдФрд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрд▓реЙрдЯ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
private slots: void addJSObject(); public slots: void webViewQuitClicked ();
рдФрд░ mainwindow.cpp рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, QWebFrame рд╣реЗрдбрд░ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ, рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓реЗрдВ рдФрд░ рдореЗрдирд╡рд┐рдВрдбреЛ.h рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ:
... #include <QWebFrame> #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addJSObject())); } void MainWindow::addJSObject() { ui->webView->page()->mainFrame()->addToJavaScriptWindowObject(QString("mainWindow"), this); } void MainWindow::webViewQuitClicked () { qApp->quit(); } ...
рдЕрдм, рдЗрд╕ рдХреЛрдб рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ:
- рдирд┐рдЬреА рд╕реНрд▓реЙрдЯ addJSObject () - рдкреНрд░рддреНрдпреЗрдХ рдирдП рдкреЗрдЬ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдПрдХ рдЬреЗрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдлреЙрд░реНрдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рд╡реЗрдм рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред JavaScriptWindowObjectCleared () рд╕рд┐рдЧреНрдирд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗрдм рдкреЗрдЬ рдкрд░ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХрд╛ рдирд╛рдо "mainWindow" рд╣реЛрдЧрд╛ред
- WebViewQuitClicked () рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрд▓реЙрдЯ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрд▓реЙрдЯ рд╣реИ рдЬреЛ рд╡реЗрдм рдкреЗрдЬ рдкрд░ рд╕реНрдерд┐рдд рд╣рдорд╛рд░реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рд╣рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдЖрдк рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рддрдм рдЬреЗрдПрд╕ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╡реЗрдм рдкреЗрдЬ рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ HTML рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Application Example</title> <script> function quitApplication() { mainWindow.webViewQuitClicked (); } </script> </head> <body> <a href="#" onclick='quitApplication();'>Quit Application</a> </body> </html>
рдФрд░ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдЗрд╕рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
ui->webView->load("file:///"+QApplication::applicationDirPath() + "/../../html5caller/example.htm")
рдмреЗрд╢рдХ, рдЖрдк рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрд╣реАрдВ рд╕реЗ рдкреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдБ, рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо C ++ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдХреБрдЫ рднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ! рд╣рдо рдмрд╕ рд╕реА + + рдХреЛрдб рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрд▓реЙрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛:
mainwindow.h:
public slots: void webViewQuitClicked (); void webViewShowMessageClicked (QString message, int number);
mainwindow.cpp:
... void MainWindow::webViewShowMessageClicked (QString message, int number) { QMessageBox::information(this, "From Web", message+QString::number(number)); } ...
рдФрд░ рдЙрджрд╛рд╣рд░рдг рдмрджрд▓реЗрдВред
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Application Example</title> <script> function quitApplication() { mainWindow.webViewQuitClicked (); } function calculate(val1, val2) { result = eval(parseFloat(document.calc.val1.value)+parseFloat(document.calc.val2.value)) mainWindow.webViewShowMessageClicked ("Result: ", result); } </script> </head> <body> <a href="#" onclick='quitApplication();'>Quit Application</a> <FORM name="calc"> <input name="val1" type="text" value="3" size="4">+ <input name="val2" type="text" value="4" size="4"> <input type="button" value=" + " onclick="calculate(val1, val2)"> </FORM> </body> </html>
рдЕрдм, рд╣рдо рди рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:

рдЦреИрд░, рдЖрдЦрд┐рд░реАред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрд▓рд┐рдП рдмрддрд╛рддреЗ рд╣реИрдВред рд╣рдо рдХреБрдЫ рдбреЗрдЯрд╛ C ++ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд╕реНрд▓реЙрдЯ рдореЗрдВ рд░рд┐рдЯрд░реНрди рдбреЗрдЯрд╛ рдЯрд╛рдЗрдк рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
... QString readResult(int val1, int val2) { ... return QString(); } ...
рдФрд░ рдЬреЗрдПрд╕ рдХреЛрдб рд╕реЗ, рд╣рдо рджреВрд╕рд░реЛрдВ рдХреА рддрд░рд╣ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ, рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдЪрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рд░рд┐рдЯрд░реНрди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
var lolo = mainWindow.readResult();
рдпрд╣реА рд╣реИ ... рдЖрдЧреЗ рдмрдврд╝реЛ ...
C ++ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛
рд╣рдо рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрд╕ рдкрд░ рдирд┐рд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред JS рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ QWebFrame рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ: рд╣рдореЗрдВ рдкреГрд╖реНрда рдкрд░ рд╕рднреА рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ url рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
QVariant listOfImages = webView.page()->mainFrame()->evaluateJavaScript("document.getElementsByTagName(\"img\").length;"); double numberOfImages = listOfImages.toDouble(); for (double i = 0; i < numberOfImages; ++i) { srcOfImages = webView.page()->mainFrame()->evaluateJavaScript(QString("document.getElementsByTagName(\"img\")[%1].src;").arg(i)); imageUrl = srcOfImages.toString(); }
рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЯрд╛рдЗрдк img рдХреЗ рдЯреИрдЧреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЬрд┐рди URLs рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЙрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдкреГрд╖реНрда рдкрд░ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЙрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдореЗрдВ QWidget рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛
рдпрд╣ рджреВрд╕рд░рд╛ рдмрдбрд╝рд╛ рд╡рд┐рд╖рдп рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣ рдХрд╛рдлреА рдорд╛рдирдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ ... рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡реЗрдм рдкреЗрдЬ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рдХреБрдЫ рд╡рд┐рдЬреЗрдЯ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗред
рдпрд╣ QWebPluginFactory рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Qt Creator рдореЗрдВ, рдмрд╛рдИрдВ рдУрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреНрд░реА рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдкрд░реНрдХ рдореЗрдиреВ рд╕реЗ, "рдирдпрд╛ рдЬреЛрдбрд╝реЗрдВ" -> C ++ рд╡рд░реНрдЧ рдЪреБрдиреЗрдВред рд╡рд░реНрдЧ рдирд╛рдо MyWidgetFactory, рдЖрдзрд╛рд░ рд╡рд░реНрдЧ QWebPluginFactory, рдкреНрд░рдХрд╛рд░ QObject, рдлрд┐рд░ рдкреВрд░рд╛ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
QObject *create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const; QList<QWebPluginFactory::Plugin> plugins() const;
рдкрд╣рд▓рд╛ рдорд╛рдВрдЧ рд╡реЗрдм рдкреЗрдЬ рдкрд░ рд╡рд┐рдЬреЗрдЯреНрд╕ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░рд╛ рд╡реНрдпрдХреНрддрд┐ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдирдП рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╢реБрд░реВ рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ рдЬрдм рдореИрдВрдиреЗ Vkontakte.ru рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрдд рд▓рд┐рдЦрд╛ рдерд╛ред рддрдм рдореБрдЭреЗ рдкреЗрдЬ рдореЗрдВ рдПрдХ рдореНрдпреВрдЬрд┐рдХ рдкреНрд▓реЗрдпрд░ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреАрдд рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред рдЖрдк рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
code.google.com/p/vimka/source/browse/#svn%2Ftrunk%2Fchats рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ vkmediafactory.h рдФрд░ vkmediafactory.cpp
рдЕрдм рд╣рдо рдХреБрдЫ рд╕рд░рд▓ рдХрд░реЗрдВрдЧреЗред рддреЛ, рдЖрдЗрдП рдкрд░рд┐рдгрд╛рдореА рдХрдХреНрд╖рд╛ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдмрджрд▓рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред
mywidgetfactory.h:
#ifndef MYWIDGETFACTORY_H #define MYWIDGETFACTORY_H #include <QWebPluginFactory> class MyWidgetFactory : public QWebPluginFactory { Q_OBJECT public: explicit MyWidgetFactory(QObject *parent = 0); QObject *create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const; QList<QWebPluginFactory::Plugin> plugins() const; signals: public slots: }; #endif
mywidgetfactory.cpp:
#include "mywidgetfactory.h" #include <QTabWidget> #include <QPushButton> #include <QProgressBar> #include <QDebug> #include <QApplication> #include <QUrl> MyWidgetFactory::MyWidgetFactory(QObject *parent) : QWebPluginFactory(parent) { } QList<QWebPluginFactory::Plugin> MyWidgetFactory::plugins() const { QWebPluginFactory::MimeType mimeType; mimeType.name = "text/qtexample"; mimeType.description = "Comma-separated values"; mimeType.fileExtensions = QStringList() << "txt"; QWebPluginFactory::Plugin plugin; plugin.name = "PluginFactory Example"; plugin.description = "PluginFactory Example"; plugin.mimeTypes = QList<MimeType>() << mimeType; return QList<QWebPluginFactory::Plugin>() << plugin; } QObject *MyWidgetFactory::create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const { qDebug() << mimeType << url << argumentNames << argumentValues; if (mimeType != "text/qtexample") return 0; QTabWidget *tab = new QTabWidget(); int max = argumentValues.last().split(",").first().toInt(); int val = argumentValues.last().split(",").last().toInt(); QProgressBar *progressBar = new QProgressBar(); tab->addTab(progressBar, "Progress"); progressBar->setMaximum(max); progressBar->setValue(val); QPushButton *pb = new QPushButton("Click me!"); tab->addTab(pb, "Button"); connect(pb, SIGNAL(clicked()),QApplication::instance(), SLOT(quit())); return tab; }
рд╣рдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ? рдкреНрд▓рдЧрдЗрдиреНрд╕ () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдордиреЗ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛, рдЬреЛ рдЗрд╕ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рднреА рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛ рдФрд░, рдЬрдм рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдмрдирд╛рдПрдВ () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдкреЗрдЬ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рд╡рд┐рдЬреЗрдЯ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░реЗрдВред
рдЕрдЧрд▓рд╛, рдмрдирд╛рдиреЗ () рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдХрдВрд╕реЛрд▓ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ (рдкрд╛рда / qtexample) рдФрд░ рдпрджрд┐ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдЧреИрд░-рд░рд┐рдХреНрдд рд╡рд┐рдЬреЗрдЯ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХрд╛ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
"text/qtexample" QUrl( "file:///D:/devel/html5caller/100,28" ) ("type", "data", "width", "height", "src") ("text/qtexample", "100,28", "300", "300", "100,28")
рдпрд╣ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ ...
рдЕрдЧрд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд▓рдЧрдЗрди рдХрд╛рд░рдЦрд╛рдиреЗ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ mainwondow.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛ рдирдП рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗрдВ:
#include <QWebSettings> #include "mywidgetfactory.h"
рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдмрджрд▓реЗрдВ:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { QWebSettings::globalSettings()->setAttribute( QWebSettings::PluginsEnabled, true); ui->setupUi(this); connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addJSObject())); MyWidgetFactory *factory = new MyWidgetFactory(ui->webView); ui->webView->page()->setPluginFactory(factory); ui->webView->load("file:///"+QApplication::applicationDirPath() + "/../../html5caller/example.htm"); }
рдпрд╣рд╛рдВ, рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╡реИрд╢реНрд╡рд┐рдХ QtWebKit рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рд╕рдкреЛрд░реНрдЯ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдордиреЗ рдЕрдкрдиреА рдлреИрдХреНрдЯреНрд░реА рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡реЗрдм рд╡реНрдпреВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣рдорд╛рд░реЗ рдХреНрдпреВ рд╡реЗрдЬрдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдлреИрдХреНрдЯреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ред
рдЕрдВрддрд┐рдо, рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдЕрднреА рднреА рдмрдирд╛ рд╣реБрдЖ рд╣реИ - рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ web-cnhfybxre рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ / рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, example.htm рдЦреЛрд▓реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдлрд╝реЙрд░реНрдо рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рдж рдЗрд╕ рддрд░рд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
<object type="text/qtexample" data="100,28" width="300" height="300"></object>
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рд╣рдо рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдирд┐рд░реНрдорд┐рдд рдкреНрд▓рдЧ-рдЗрди рд╣рдорд╛рд░реЗ рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВ, рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЖрдпрд╛рдо рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░реЗрдВред
рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рдЦрд┐рдбрд╝рдХреА рд╣реЛрдЧреА:

рдЖрдк рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкреНрд░рд╣рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреИрдм рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рджреВрд╕рд░реЗ рдЯреИрдм рдкрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд┐рдХ рдФрд░ рдмрдВрдж рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдЧрд╛ред
рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╣ рд╕рдм рд╣реИ рдЬреЛ рдореИрдВ рдЗрд╕ рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдпрд╣рд╛рдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
code.google.com/p/html5cppmixer/downloads/listрдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдЙрдкрдпреЛрдЧреА рдФрд░ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдЧрд╛ред