2014-01-23 102 views
3

內以截圖這是我原來的問題:
我只是想採取截圖(使用打印鍵)我的全屏QtQuick 2的應用。但我得到的只是一張黑色或有時是白色的屏幕截圖。當應用程序沒有以全屏啓動時,它可以工作。從全屏Qt Quick的應用


SOLUTION

,我想我在這裏發表一個非常好的解決方案, 儘管它不能解決採取截圖與外部工具的原始問題。

與接受答案的建議開始,我做了以下內容:

首先,我增加了一個信號,我的QML主類(在main.qml)

signal takeScreenShot() 

這個信號按emmited某個按鈕。 然後寫一個C++/QT類autside的QML代碼來處理該信號:

class QMLSupplement : public QObject 
{ 
    Q_OBJECT 
    public: 
     QQuickView* view; 

    public: 
     QMLSupplement(QObject* parent = 0); 

    public slots: 
     void takeScreenShot(); 
}; 

到QQuickView基準用於採取的屏幕截圖。

void QMLSupplement::takeScreenShot() 
{ 
    QString file; 
    file = QDateTime::currentDateTime().toString("yyyy-MM-dd_hhmmss"); 
    file += ".png"; 

    qDebug() << "taking screenshot, saving here:" << file; 

    view->grabWindow().save(file); 
} 

最後我連接信號和槽在main.cpp中:

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 

    QQuickView view; 
    view.setSource(QUrl::fromLocalFile("./qml/main.qml")); 
    view.setResizeMode(QQuickView::SizeRootObjectToView); 

    QObject* rootObject = (QObject*) view.rootObject(); 

    QMLSupplement supplement; 
    supplement.view = &view; 
    QObject::connect(rootObject, SIGNAL(takeScreenShot()), 
        &supplement, SLOT(takeScreenShot())); 

    view.show(); 
// view.showFullScreen(); 

    return app.exec(); 
} 
+0

請爲回答這個問題後的解決方案。隨意回答你自己的問題,然後編輯問題文本本身的解決方案。 –

回答

3

這就是你正在哪裏運行平臺的限制。如果你關心這個工作,你需要自己實現這個功能。 Qt爲您提供足夠的內容以獲取Qt Quick 2窗口的內容並將其作爲圖像發佈到剪貼板。

在您的打印鍵的處理程序,如果檢測到該窗口是全屏幕,你需要將QQuickWindow實例傳遞給一個輔助函數:

void grabAndCopy(QQuickWindow * window) { 
    QApplication::clipboard()->setImage(window->grabWindow()); 
} 

... 
if (window->windowState() == Qt::WindowFullScreen) grabAndCopy(window);