如何修复我的 QClipboard 对象的行为?
How to fix my QClipboard object's behavior?
我正在使用 Windows 下的 QClipboard
对象 10.
当我在一些示例文本上按 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 : ""
似乎在调用 QApplication::clipboard()->text()
之前引入暂停可以解决此问题。
QTimer
或普通 Sleep()
/nanoSleep()
(Windows/Linux) 可以用来达到效果。
QTimer 示例:
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));
void MainWindow::showClipboard()
{
QTimer::singleShot(50, this, qDebug() << QApplication::clipboard()->text());
}
Windows Sleep()
示例:
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));
void MainWindow::showClipboard()
{
Sleep(50);
qDebug() << QApplication::clipboard()->text();
}
我正在使用 Windows 下的 QClipboard
对象 10.
当我在一些示例文本上按 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 : ""
似乎在调用 QApplication::clipboard()->text()
之前引入暂停可以解决此问题。
QTimer
或普通 Sleep()
/nanoSleep()
(Windows/Linux) 可以用来达到效果。
QTimer 示例:
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));
void MainWindow::showClipboard()
{
QTimer::singleShot(50, this, qDebug() << QApplication::clipboard()->text());
}
Windows Sleep()
示例:
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(showClipboard()));
void MainWindow::showClipboard()
{
Sleep(50);
qDebug() << QApplication::clipboard()->text();
}