Как QFileDialog вывести диалог открытия файла и получить имя файла в char?

Имеется консольное приложение. В котором требуется добавить qtшный openfiledialog.
Интересует только имя файла выбранного в char, так как потом используются функции открытия изображения opencv.
Все #include сделал.
QFileDialog::getOpenFileName(this, tr("Open Document"), QDir::currentPath(), tr("Document files (*.doc *.rtf);;All files (*.*)"), 0, QFileDialog::DontUseNativeDialog);
	QString filename = QFileDialog::getOpenFileName(
		this,
		tr("Open Document"),
		QDir::currentPath(),
		tr("Document files (*.doc *.rtf);;All files (*.*)"));
	if (!filename.isNull())
	{
		qDebug(filename.toAscii());
	}


Вот этот код пробовал. Не работает, ругается на "this".
Планировал потом QString в char вот так:
QString *qs = new QString("переведи меня в чары! :)");
char const* ch = qs->toLocal8Bit().constData();


P.S Windows 7 x64, Visual Studio 2015, QT VC2015++
  • Вопрос задан
  • 877 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
this — это скрытый параметр каждого не-static-метода, который говорит: для какого объекта он вызван. Если этот объект не QWidget, или функция static, или вообще не метод, то или подставляйте другой QWidget (это значит: кнопка на панели задач та же, что и у этого QWidget), или ставьте NULL (завести новую кнопку на панели задач).

В вашем случае, разумеется, NULL. Или nullptr, если работаете в Си++11.

QString *qs = new QString("переведи меня в чары! :)");
char const* ch = qs->toLocal8Bit().constData();

Верно придумали, только нет нужды заводить строку в куче операцией new. Строка в Qt и так достаточно «экономная», так что хватит
QString qs("переведи меня в чары! :)");
char const* ch = qs.toLocal8Bit().constData();

Только не забывайте про время жизни этого char const*: он будет жить ровно столько, сколько будет жить конкретное значение строки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы