2016-12-27 20 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() QTimerを使用して5秒ごとに呼び出されます。上記のコードは、Windows 7でクラッシュしたコードを実行しようとすると、Linuxで完全に機能します。

QString originalText = mime ? mime->text() : QString(); 

答えて

0

Windowsはそれが毎回、なぜアプリケーションのクラッシュだ、QClipboard::Selectionをサポートしていません:あなたは以前の状態をキャッシュするか、次の操作を行ういずれかにたい場合がありますので

+2

macOSもこの機能をサポートしていないので、コードはこの場合失敗します。このチェックには['QClipboard :: supportsSelection()'](http://doc.qt.io/qt-5/qclipboard.html#supportsSelection)を使う方が良いでしょう。 – kefir500

2

clipboard->mimeDataは、nullにすることができます。ここで私はそれをどのように解決したのですか?

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(); 
    } 
関連する問題