2013-05-06 3 views
-1

Вы знаете, что везде, где вам нужен объект QString, в качестве параметра вы можете использовать только строки стиля c. Например, для функции showMessage требуется QString. Но я передал строку C-стиля этой функции, и все в порядке. Я имею в виду, что мы можем думать о "%1 a sample text" как о объекте QString! может быть!Почему я не могу использовать функцию QString :: arg здесь?

statusBar()->showMessage("%1 a sample text"); 

Но почему мы не можем использовать этот код:

statusBar()->showMessage("%1 a sample text".arg("This is ")); 
+0

О нет! Зачем голосовать? – saeed

ответ

5

Поскольку implicit-conversion к QString будет использоваться при передаче const char[] функционировать и нет implicit-conversion, без вызова функции, поэтому, вы пытаетесь вызвать метод arg на const char[], что неверно, построить QString по

statusBar()->showMessage(QString("%1 a sample text").arg("This is ")); 

и все будет хорошо.

+0

Если этот код является частью класса, наследующего QObject, то вы можете писать меньше символов, используя метод QObject :: tr(). tr («% 1 образец текста»). arg («Это») – JustAnotherCurious

1

Все в форме "..." имеет тип const char* и, следовательно, не QString. Это побочный эффект C++, имеющий, чтобы быть совместимым с C.

Однако в некоторых ситуациях (например operator+), неявное преобразование в QString допускается, поскольку QString имеет конструктор, принимающий параметр типа const char*. В этом случае, однако, вам необходимо использовать явное преобразование, то есть

statusBar()->showMessage(QString("%1 a sample text").arg("This is ")); 
Смежные вопросы