Скопируйте текст и заполнители, переменные в буфер обмена

В моем приложении я хочу генерировать случайные числа или строки с текстом перед ним. Для меня важно, чтобы текст не отображался в моем окне, а копировался в буфер обмена.

int randomnumber = rand() % 46 + 1;

QClipboard *cb = QApplication::clipboard();
cb->setText("Just a test text. And here we have a placeholder! %i", randomnumber);

QClipboard отлично работает с обычным текстом (в этом примере «Просто тестовый текст. А здесь у нас есть заполнитель!»). Но я также хочу скопировать заполнители для случайных чисел, чтобы скопированный текст выглядел так:

Просто тестовый текст. И вот у нас есть местозаполнитель! 42

К сожалению, я получаю сообщение об ошибке: неверное преобразование из 'int' в 'QClipboard::Mode'

Можно ли копировать в буфер обмена текст, заполнители и т. д., а не только обычный текст?


person GoYoshi    schedule 22.06.2015    source источник
comment
setText не похож на printf. Здесь вам понадобится QString::arg().   -  person simon    schedule 22.06.2015


Ответы (2)


Вы неправильно используете функцию setText. Каноническим прототипом является text(QString & subtype, Mode mode = Clipboard) const из документации.

Что вы хотите сделать, так это собрать QString заранее, а затем использовать его для заполнения буфера обмена.

QString message = QString("Just a test text. 
     And here we have a placeholder! %1").arg(randomnumber);
cb->setText(message);

Обратите внимание, что аргумент равен %1 вместо %f. Номера аргументов идут последовательно в Qt. Пожалуйста, ознакомьтесь с этой статьей для получения дополнительной информации. .

Надеюсь, это поможет!

person Tyler Jandreau    schedule 22.06.2015

Вы должны отформатировать строку перед передачей ее в качестве параметра в cb->setText.

просто сделайте это:

QString txt = QString("Просто тестовый текст. А вот и заполнитель! %1").arg(randomnumber);

А потом:

cb->setText(txt);

person Tulio F.    schedule 22.06.2015