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

问题描述 投票:0回答:1

我在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 : ""
qt qclipboard
1个回答
0
投票

似乎在调用QApplication::clipboard()->text()之前引入暂停修复了这个问题。 可以使用QTimer或plain 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();
}
© www.soinside.com 2019 - 2024. All rights reserved.