【问题标题】:program crashes when trying to access clipboard尝试访问剪贴板时程序崩溃
【发布时间】:2016-12-27 21:46:25
【问题描述】:

我正在尝试通过 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 秒调用一次。上面的代码在linux下完美运行,当我尝试在windows 7中运行代码时它崩溃了。

【问题讨论】:

    标签: qt qt5


    【解决方案1】:

    clipboard->mimeData 可以为 null,因此您可能想要缓存之前的状态,或者执行以下操作:

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

    【讨论】:

      【解决方案2】:

      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 ();
          }
      

      【讨论】:

      • 请注意,macOS 也不支持此功能,因此在这种情况下您的代码将失败。我猜最好使用QClipboard::supportsSelection() 进行检查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多