Qt on Android锛氬簲鐢ㄦ埅灞?/h1>
鍦ㄦ闈㈠钩鍙颁笂锛孮Screen::grabWindow 鍙互涓轰綘鐨勫簲鐢ㄦ埅灞忥紝Android 骞冲彴涓婅繖涓笉绠$敤浜嗭紝涓嶈繃鏈夋浛浠f柟娉曘€?/p>
鍒嗕袱绉嶆儏鍐垫潵璇村惂锛?Qt Widgets 涓?Qt Quick銆?/p>
鎻掓挱骞垮憡锛屾杩庡叧娉ㄦ垜鐨勫井淇¤闃呭彿鈥滅▼搴忚鐣屸€濓紝鎵弿涓嬫柟浜岀淮鐮佸嵆鍙細
绋嬪簭瑙嗙晫姣忓懆鏇存柊涓€鍒颁簩绡囩▼搴忓憳鐩稿叧鐨勬枃绔狅紝浠庡績鍑哄彂锛屾极璋堢▼搴忓憳鐪间腑鐨勪笘鐣屽拰涓栫晫鐪间腑鐨勭▼搴忓憳銆?/p>
Qt Widgets
鏈€鍏抽敭鐨勫氨鏄竴涓嚱鏁帮細 QWidget::render 锛岃繖涓柟娉曞彲浠ユ妸涓€涓?QWidget锛堝寘鍚畠鐨勫瀛愪滑锛夌殑鍐呭娓叉煋鍒颁竴涓?QPixmap 涓婏紝鐒跺悗鎴戜滑鐢?QPixmap 鐨?save 鏂规硶灏卞彲浠ヤ繚瀛樹簡銆?/p>
涓嬮潰鏄叧閿唬鐮侊細
void Widget::onGrab(){ QPixmap *pixmap = new QPixmap(size()); render(pixmap); QString savedPath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); if(savedPath.isEmpty()) { savedPath = QDir::currentPath(); } m_savedPathLabel->setText(savedPath); m_savedPathLabel->adjustSize(); savedPath += "/grabWidgets.png"; bool ret = pixmap->save(savedPath); if(ret) { m_savedPathLabel->setText("OK."+savedPath); } else { m_savedPathLabel->setText("Failed."+savedPath); }}
onGrab() 鏂规硶鐨勫墠涓よ浠?widget 鐨勫ぇ灏忓垱寤轰簡涓€涓?QPixmap 锛岀劧鍚庤皟鐢?render 鏂规硶銆傛帴涓嬫潵鐨勪唬鐮佹槸鎶婂浘鐗囦繚瀛樺埌 Android 璁惧鐨勯粯璁ゅ浘鐗囩洰褰曚笅銆?
Qt Quick
Qt Quick 搴旂敤锛岄兘浼氭湁涓€涓?QQuickWindow 锛岃€?QQuickWindow 鏈変竴涓?grabWindow 鏂规硶锛屽彲浠ユ妸搴旂敤褰撳墠绐楀彛鐨勫唴瀹逛繚瀛樹负鍥剧墖銆?/p>
杩欎釜鐗垫秹鍒?QML 涓?C++ 娣峰悎缂栫▼浜嗭紝鍙傝€冩垜鐨勩€?span>Qt Quick鏍稿績缂栫▼銆嬶紝鎴栬€呪€淨t Quick 涔?QML 涓?C++ 娣峰悎缂栫▼璇﹁В鈥濄€?/span>
C++浠g爜
澶存枃浠?grabber.h 锛?/p>
class Grabber : public QObject{ Q_OBJECTpublic: Grabber(QObject *parent = 0); Q_INVOKABLE QString grab(QQuickWindow *w);};
婧愭枃浠?grabber.cpp 閲岀殑鍏抽敭浠g爜锛?
QString Grabber::grab(QQuickWindow *w){ QImage image = w->grabWindow(); if(image.isNull()) return QString(); QString savedPath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); if(savedPath.isEmpty()) { savedPath = QDir::currentPath(); } savedPath += "/grabQML.png"; bool ret = image.save(savedPath); if(ret) { return savedPath; } return QString();}
鍙﹀闇€瑕佸湪 main() 鍑芥暟涓缃竴涓?QmlContext 鐨勫睘鎬э紝浠g爜濡備笅锛?
Grabber *grabber = new Grabber; engine.rootContext()->setContextProperty("grabber", grabber);
鐒跺悗鎴戜滑灏卞彲浠ュ湪 Qml 鏂囦欢鍐呬娇鐢?Grabber 鏉ユ埅鍥句簡銆?
QML浠g爜
鎴戠殑娴嬭瘯 QML 鏂囨。 main.qml 濡備笅锛?/p>
import QtQuick 2.2import QtQuick.Window 2.0import QtQuick.Controls 1.1Window { id: rootWin; visible: true; title: qsTr("Hello Grab QML"); objectName: "rootWin"; Text { text: qsTr("Hello Grab QML"); color: "blue"; font.pointSize: 16; anchors.centerIn: parent; } Rectangle { anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; width: 120; height: 120; color: "blue"; } Text { id: savedPath; anchors.left: parent.left; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; color: "red"; font.pointSize: 12; } Button { id: grab; anchors.bottom: savedPath.top; anchors.bottomMargin: 4; anchors.horizontalCenter: parent.horizontalCenter; text: "Grab"; onClicked: { var saved = grabber.grab(rootWin); if(saved.length == 0){ savedPath.text = "Failed!"; }else{ savedPath.text= "Ok -" + saved; } } }}
鎴戝湪 grab 鎸夐挳鐨?onClicked 淇″彿澶勭悊鍣ㄥ唴璋冪敤 grabber.grab() 鏉ュ畬鎴愭埅鍥炬搷浣滐紝鎴愬姛鏃跺皢璺緞鏄剧ず鍑烘潵銆?
OK锛屽氨杩欎箞澶氫簡銆?/p>
鎯充簡瑙f洿澶?Qt on Android 鍐呭锛屽彲浠ュ弬鑰冦€?span>Qt on Android鏍稿績缂栫▼銆嬫垨鈥淨t on Android涓撴爮鈥濓紝鎯充簡瑙f洿澶?Qt Quick锛圦ML锛夊唴瀹癸紝鍙互鍙傝€冦€?span>Qt Quick鏍稿績缂栫▼銆嬫垨鈥淨t Quick涓撴爮鈥濄€?/p>
更多相关文章
- 代码中设置drawableleft
- android 3.0 隐藏 系统标题栏
- Android开发中activity切换动画的实现
- Android(安卓)学习 笔记_05. 文件下载
- Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
- 技术博客汇总
- android 2.3 wifi (一)
- AndRoid Notification的清空和修改
- Android中的Chronometer