2014-01-23 1 views
0

Я пытаюсь сделать функцию, заменяющую текст внутри QLineEdit, когда пользователь хочет вернуться, является именем по умолчанию с помощью QPushButton.Невозможно использовать QString в QLineEdit или QComboBox в качестве параметра

Здесь код становится «сохраненным».

`//Must get information in the DB 
lineditPlayerName = new QLineEdit("Nouveau Profil"); 
nameAsDefault = new QString(lineditPlayerName->text()); 
languageAsDefault = new QString(comboBoxlanguage->currentText());` 

Это функция я использую, чтобы изменить значение по умолчанию обратно

//This code works 
void ProfileManager::revertName(){ 
    lineditPlayerName->setText("nameAsDefault"); 
    btnRevertName->setEnabled(false); 
} 

Но мне это нужно так:

//This code does'nt 
void ProfileManager::revertName(){ 
    lineditPlayerName->setText(NameAsDefault); 
    btnRevertName->setEnabled(false); 
} 

Я не могу заставить его работать его дайте мне эту ошибку: нет подходящей функции для вызова 'QLineEdit :: setText (QString * &)'

Благодаря

+0

Вам действительно нужно динамически выделять QString? В Qt мне почти никогда не нужно это делать. – drescherjm

+0

Я читал учебник онлайн, и это касается всех образований, которые у меня есть ... Если вы можете объяснить, почему мне не нужно это делать, это будет оценено и вы сможете объяснить, как это сделать. – Chax

+2

Вам нужен член 'QString nameAsDefault' вашего класса, а не' QString * nameAsDefault' (указатель на строку). Затем вы устанавливаете его, просто записывая 'nameAsDefault = lineeditPlayerName-> text()'. –

ответ

0

Вы должны разыменовать NameAsDefault переменной

void ProfileManager::revertName(){ 
    lineditPlayerName->setText(*NameAsDefault); 
          //^Here I dereferenced the pointer 
    btnRevertName->setEnabled(false); 
} 

Тип nameAsDefault является указатель к QString. Однако QLineEdit::setText ожидает объект QString, а не указатель. Поэтому компилятор сообщает вам, что нет функции, которая ожидает указатель.

я не видел вашу декларацию переменной nameAsDefault, но так как

nameAsDefault = new QString(lineditPlayerName->text()); 

компилирует и new возвращает указатель, я полагаю, это указатель.

Кроме того, что более важно, так это то, что вы почти никогда не должны выделять объекты, используя new. Особенно это не объекты из библиотеки Qt, которые неявно разделяются.

+0

Можете ли вы объяснить, почему, мне просто нужно понять. Спасибо за ответ. – Chax

+0

Спасибо за быстрый ответ, очень оцененный. – Chax