Estou escrevendo uma ferramenta simples em Qt 6.8 C++23 para aprender sobre Qt. Ubuntu 22.04 VS Code.
Tenho 2 QLineEdit para diretório de origem e diretório de destino. Quando o usuário foca na edição de linha, a ferramenta deve abrir o QFileDialog para que ele não precise digitar o caminho completo. A edição de linha em si deve ser somente leitura.
A fonte para o diálogo contido pode ser encontrada no GitHub .
O problema é que quando a caixa de diálogo do arquivo fecha, ela reabre imediatamente porque o foco ainda está na linha de edição. Como faço para perder o foco depois que a caixa de diálogo do arquivo fecha?
#ifndef DIRECTORYLINEEDIT_H_
#define DIRECTORYLINEEDIT_H_
#include <QLineEdit>
#include <QFileDialog>
class DirectoryLineEdit : public QLineEdit {
Q_OBJECT
public:
explicit DirectoryLineEdit(const char* dleName, const char* title, int leWidth, QWidget *parent = nullptr)
: QLineEdit{parent}, fileDialogTitle{title}
{
setObjectName(QString::fromUtf8(dleName));
setStyleSheet("width: " + QString::number(leWidth) + "px;");
setReadOnly(true);
}
void focusInEvent(QFocusEvent *event)
{
QString textToChange = text();
textToChange = QFileDialog::getExistingDirectory(nullptr, fileDialogTitle,
textToChange, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
setText(textToChange);
}
private:
QString fileDialogTitle;
};
#endif // DIRECTORYLINEEDIT_H_