我有一个QTextEdit,其中包含文字:
It's test.
我想选择此文本并使用Ctrl + C将其复制到我的剪贴板,但我想在剪贴板中将“test”替换为“good”。
我的意思是:我希望在复制QTextEdit
的原始文字后将其放入剪贴板中:
It's good.
注意:我只想在从QTextEdit复制文本时替换剪贴板,我不想在完成任何复制操作时替换剪贴板。
感谢。
答案 0 :(得分:2)
假设您有一个指向名为QString data = clipboard->text();
data.replace(QString("test"), QString("good"));
clipboard->setText(data);
的{{3}}的指针:
private async Task<List<PingReply>> PingAsync()
{
Ping pingSender = new Ping();
var tasks = serverNames.Select(
ip => pingSender.SendPingAsync(ip, 2000)
);
var results = await Task.WhenAll(tasks);
return results.ToList();
}
这使用函数QClipboard
修改剪贴板的文本(从QString::replace
访问)和QClipboard::text
以设置剪贴板的新文本。
答案 1 :(得分:2)
最好使用信号/插槽来同步在剪贴板中更改的内容与您在QTextEdit字段中实际执行的内容,以避免未定义的行为和意外地修改任务范围之外的事情。为了做到这一点,当 突出显示 这个特定的QTextEdit字段时,会发出signal
,该信号可以确保您可以复制突出显示的文本QTextEdit::copyAvailable(bool yes)
.. yes
表示突出显示文本的可用性。
最重要的是,只有当您从QTextEdit字段中按CTRL + C突出显示文本时,请确保您正在访问全局剪贴板,方法是附加信号QClipboard::dataChanged
,表示您复制了文本...然后仅修改文本。
测试此代码:编写句子..突出显示..使用CTRL + C. 复制到剪贴板及其修改过的。
实施例: 类文件可以如下所示:
.h
{
private slots:
void textSelected(bool yes);
void changeTextCopiedToCB();
private:
QClipboard *clipboard;
};
班级.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(this->ui->textEdit, &QTextEdit::copyAvailable, this, &MainWindow::textSelected); // emmited when you select the text
clipboard = QApplication::clipboard();
}
void MainWindow::textSelected(bool yes) // Slot called only when you select text in your field
{
if (yes){
qDebug() << this->ui->textEdit->toPlainText();
connect(clipboard, &QClipboard::dataChanged, this, &MainWindow::changeTextCopiedToCB); // wait tor CTRL+C
}
}
void MainWindow::changeTextCopiedToCB() // Once CTRL+C .. the data in clipboard changes..thats my data
{
QString text = clipboard->text();
text.replace(QString("test"), QString("good"));
clipboard->setText(text);
disconnect(clipboard, &QClipboard::dataChanged, this, &MainWindow::changeTextCopiedToCB); // after copy from this field, leave clipboard alone!
qDebug() << clipboard->text();
}