我正在用 Qt 6.8 C++23 编写一个简单的工具来了解 Qt。Ubuntu 22.04 VS Code。
我有 2 个 QLineEdit 用于源目录和目标目录。当用户关注行编辑时,该工具应该打开 QFileDialog,这样他们就不必输入完整路径。行编辑本身应该是只读的。
包含对话框的源代码可以在 GitHub 上找到。
问题是,当文件对话框关闭时,它会立即重新打开,因为焦点仍然在行编辑上。如何在文件对话框关闭后失去焦点?
#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_