Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Сергей85 от Апрель 05, 2017, 19:29



Название: QT Creator 3.5.1: вторая порция вопросов.
Отправлено: Сергей85 от Апрель 05, 2017, 19:29
1. Записываю стандартные стринги как "std::string". В коде встречается много раз, поэтому хотелось бы избавиться от "std::" - какие есть решения?
2. Говорят, что можно между компьютерами переносить профиль QT, чтобы не настраивать все ее настройки на новой системе - как это сделать?
3. Как в объект класса QMessageBox назначить, с каким значком и кнопками будет выводиться сообщение? SetIcon не помогает;
4. Как в функции объявить именно необязательный входной параметр и обязательно ли необязательным параметрам быть всегда после всех обязательных параметров?


Название: Re: QT Creator 3.5.1: вторая порция вопросов.
Отправлено: TheGringerEye от Апрель 05, 2017, 20:48
1. using namespace std;
2. Win + R - %APPDATA%\QtProject
3.
Код:
QMessageBox::warning(this, tr("My Application"),
                                 tr("The document has been modified.\n"
                                    "Do you want to save your changes?"),
                                 QMessageBox::Save | QMessageBox::Discard
                                 | QMessageBox::Cancel,
                                 QMessageBox::Save);
Код из документации, статический метод warning подразумевает, что будет использована иконочка предупреждения.
4. Аргумент не обязательным становится после присвоения ему дефолтного значения, все аргументы с установленным стандартным значением должны следовать после обычных аргументов, т.к. первые можно опустить, опускание же вторых вызовет ошибку компиляции.


Название: Re: QT Creator 3.5.1: вторая порция вопросов.
Отправлено: ssoft от Апрель 05, 2017, 20:54
1. Записываю стандартные стринги как "std::string". В коде встречается много раз, поэтому хотелось бы избавиться от "std::" - какие есть решения?

В месте использования (прямо в методе или в cpp) можно объявить

Код
C++ (Qt)
using namespace std;
 

или

Код
C++ (Qt)
using std::string;
 

Не стоит делать такое объявление в h, так как это может затронуть не только Ваш код.

Также можно объявить

Код
C++ (Qt)
using mytype = std::string;
 

или на старый лад

Код
C++ (Qt)
typedef std::string mytype;
 


Название: Re: QT Creator 3.5.1: вторая порция вопросов.
Отправлено: Пантер от Апрель 05, 2017, 21:11
Пиши std::string, хоть понятно будет при чтении, что это стринг из std, а не что-то самопальное.


Название: Re: QT Creator 3.5.1: вторая порция вопросов.
Отправлено: Сергей85 от Апрель 06, 2017, 19:34
1. using namespace std;
2. Win + R - %APPDATA%\QtProject
3.
Код:
QMessageBox::warning(this, tr("My Application"),
                                 tr("The document has been modified.\n"
                                    "Do you want to save your changes?"),
                                 QMessageBox::Save | QMessageBox::Discard
                                 | QMessageBox::Cancel,
                                 QMessageBox::Save);
Код из документации, статический метод warning подразумевает, что будет использована иконочка предупреждения.
4. Аргумент не обязательным становится после присвоения ему дефолтного значения, все аргументы с установленным стандартным значением должны следовать после обычных аргументов, т.к. первые можно опустить, опускание же вторых вызовет ошибку компиляции.

По справке есть QMessageBox::Critical (или QCritical, забыл) - соответствует инту 4. Если я впишу в .setIcon Critical - код работает, но если 4 - не работает. Как преобразовать инт в соответствующее ему слово в QMessageBox::?


Название: Re: QT Creator 3.5.1: вторая порция вопросов.
Отправлено: kambala от Апрель 06, 2017, 21:51
зачем туда совать инт? а преобразование выполняется с помощью static_cast().

у тебя вопросы больше по основам С++, за что и следовало бы взяться.