我想製作一個Qt應用程序來監視系統剪貼板的變化。每次用戶將一些文本複製到剪貼板(應用程序外部)時,我的應用程序應該以某種方式更改文本並將更改後的文本複製到剪貼板。問題處理QClipboard :: dataChanged()信號
問題是剪貼板只能變空了!
這裏是我的代碼:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(QApplication::clipboard(), SIGNAL(dataChanged()),
this, SLOT(processClipboardChange()));
}
void MainWindow::processClipboardChange()
{
qDebug() << "dataChanged() signal emitted.";
QClipboard * clipboard = QApplication::clipboard();
static bool dontProcessSignal = false;
if (!dontProcessSignal) {
QString text = clipboard->text();
text = "CLIPBOARD CONTENTS CHANGED."; // example.
qDebug() << "Setting clipboard contents...";
dontProcessSignal = true;
clipboard->setText(text); // will trigger another dataChanged() signal.
dontProcessSignal = false;
qDebug() << "Copied " << clipboard->text() << " to clipboard.";
}
else {
qDebug() << "Did not process dataChanged() signal.";
return;
}
}
現在,當我運行該程序,並通過複製一些文字,用Ctrl + C改變剪貼板的內容,我得到這樣的輸出:
dataChanged() signal emitted.
Setting clipboard contents...
dataChanged() signal emitted.
Did not process dataChanged() signal.
Copied "CLIPBOARD CONTENTS CHANGED." to clipboard.
但是,當我鍵入Ctrl + V將剪貼板內容粘貼到某處,沒有任何內容被粘貼。由於某種原因,剪貼板內容似乎設置爲空字符串。
QClipboard::setText()
在其他代碼中工作得很好(例如,在QPushButton::clicked
插槽中調用時)。
我不知所措。請幫忙。
你嘗試調用'clipboard->的setText(文字,QClipboard什麼: :Selection);''''剪貼板 - > setText(文本)之後''?它在行爲上有什麼不同嗎? – vahancho