Qt5 конструктор, использующий fileopen, отображающий путь к файлу в lineedit, есть ли проблема, делающая это таким образом?

только начал использовать qt,
просмотрел документы, гугл, примеры и т. д., пытаясь найти простые примеры
это показало, как делать (имхо) простые вещи, сами по себе.
хорошо, я наткнулся на свой ответ, и мне было интересно, если этот подход вызовет проблему позже, поскольку код становится более сложным.
в этом примере больше включений, чем необходимо, но это прямо из рабочего кода.
mainwindow.h:
я добавил

private slots:
void vpkButton_clicked();

и после
Ui :: MainWindow * ui;
я добавил
QLineEdit * vpkPathTxt;
в mainwindow.cpp:
после

    ui->setupUi(this);

я добавил

    connect( this->ui->vpkButton, SIGNAL( clicked() ), this, SLOT(vpkButton_clicked()) );

чтобы подключить кнопку пользовательского интерфейса к соответствующему слоту, проблема заключалась в получении строки из vpkButton_clicked () для отображения в редактировании строки, которое я сделал в дизайнере,
то, что закончило работать для меня, добавило это следующее:

    vpkPathTxt = this->ui->vpkPathTxt;

функция в моем main.cpp стала очень простой:
(Объявления QString вверху вне пустот)

void MainWindow::vpkButton_clicked()
{
vpkName = QFileDialog::getOpenFileName(this,
tr("Open VPK File"), "~/", tr("VPK Files (*_dir.vpk)"));
vpkPathTxt->setText(vpkName);
qDebug() << vpkName;
}

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

0

Решение

Одна проблема с вашим слотом состоит в том, что вы не учитываете случай, когда пользователь закрывает диалоговое окно «Открыть файл». В этом случае функция QFileDialog::getOpenFileName возвращает пустое значение QString, поэтому вы должны продолжать свою логику, только если возвращаемое значение было не пустая строка:

if (!vpkName.isNull()) {
...
}

Вторая проблема заключается в следующем, и я сделал некоторые предположения, так как я не вижу ваш полный код:

Я предполагаю, что вы хотите загрузить файл, используя имя файла, выбранное пользователем в диалоговом окне. Но вы также задаете имя файла в строке редактирования, которую пользователь может редактировать вручную. Я также предполагаю, что фактическая загрузка файла происходит на другом этапе (т.е. после нажатия другой кнопки), поэтому после того, как пользователь отредактировал имя файла вручную в строке редактирования, оно не будет таким же, как в локальной переменной vpkName,

При загрузке файла я читаю содержимое строки редактирования вместо переменной vpkName поэтому редактирование, сделанное вручную, будет соблюдено.

Другой метод — также наблюдать за редактированием строки и отражать изменения в вашей переменной. Тогда будет нормально читать переменную вместо редактирования строки при загрузке файла позже.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]