首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复我的QClipboard对象的行为?

如何修复我的QClipboard对象的行为?
EN

Stack Overflow用户
提问于 2019-03-16 16:52:55
回答 1查看 245关注 0票数 0

我正在Windows 10下使用QClipboard对象。

当我在一些示例文本上按Ctrl-C时,只想看看剪贴板里面是什么。

正如你所看到的,结果是非常不一致的,我不能确切地理解为什么。

代码:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::showClipboard()
{
    qDebug() << "Clipboard is empty:" << QApplication::clipboard()->text().isEmpty()
             << ":" << QApplication::clipboard()->text();
}

示例输出:

代码语言:javascript
复制
Clipboard is empty: false : ""
Clipboard is empty: true : ""
Clipboard is empty: false : "sample text"
Clipboard is empty: false : "sample text"
Clipboard is empty: true : ""
Clipboard is empty: false : ""
Clipboard is empty: false : ""
Clipboard is empty: false : ""
Clipboard is empty: false : "sample text"
Clipboard is empty: true : ""
Clipboard is empty: false : "sample text"
Clipboard is empty: true : ""
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-17 14:48:21

在调用QApplication::clipboard()->text()之前引入暂停似乎解决了这个问题。

可以使用QTimer或普通的Sleep()/nanoSleep() (Windows)来实现这种效果。

QTimer示例:

代码语言:javascript
复制
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));

void MainWindow::showClipboard()
{
    QTimer::singleShot(50, this, qDebug() << QApplication::clipboard()->text());
}

Sleep() 示例:

代码语言:javascript
复制
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));

void MainWindow::showClipboard()
{
    Sleep(50);
    qDebug() << QApplication::clipboard()->text();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55199228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档