我正在Windows 10下使用QClipboard对象。
当我在一些示例文本上按Ctrl-C时,只想看看剪贴板里面是什么。
正如你所看到的,结果是非常不一致的,我不能确切地理解为什么。
代码:
#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();
}示例输出:
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 : ""发布于 2019-03-17 14:48:21
在调用QApplication::clipboard()->text()之前引入暂停似乎解决了这个问题。
可以使用QTimer或普通的Sleep()/nanoSleep() (Windows)来实现这种效果。
QTimer示例:
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));
void MainWindow::showClipboard()
{
QTimer::singleShot(50, this, qDebug() << QApplication::clipboard()->text());
}Sleep() 示例:
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));
void MainWindow::showClipboard()
{
Sleep(50);
qDebug() << QApplication::clipboard()->text();
}https://stackoverflow.com/questions/55199228
复制相似问题