2016-12-27 38 views
1

我想通過QClipboard獲取剪貼板數據。這裏是我的代碼:嘗試訪問剪貼板時程序崩潰

void MainWindow::getText() 
{ 
    QClipboard *clipboard = QGuiApplication::clipboard(); 
    const QMimeData *mime = clipboard->mimeData (QClipboard::Selection); 
    QString originalText = clipboard->text(); // no crashes in windows 
    //QString originalText = mime->text(); //this line causing program crash 
    ................. 
} 

getText()稱爲每隔5秒內使用QTimer。上面的代碼在linux中完美工作,當我嘗試在Windows 7中崩潰時運行代碼。

回答

0

Windows不支持QClipboard::Selection,這就是爲什麼應用程序崩潰每次。下面是我如何解決它

QString originalText; 
if(QSysInfo::productType() == "windows") { 
      QString clipboard = QApplication::clipboard()->text(); 
      originalText = clipboard; 
    } else { 
     // for linux 
     QClipboard *clipboard = QGuiApplication::clipboard(); 
     const QMimeData *mime = clipboard->mimeData (QClipboard::Selection); 
     originalText = mime->text(); 
    } 
+2

請注意,macOS也不支持此功能,所以你的代碼在這種情況下將失敗。我猜這個檢查最好使用['QClipboard :: supportsSelection()'](http://doc.qt.io/qt-5/qclipboard.html#supportsSelection)。 – kefir500

2

clipboard->mimeData可以爲空,所以你可能想要麼緩存以前的狀態,或執行以下操作:

QString originalText = mime ? mime->text() : QString(); 
相關問題