我没有那么多的C++经验,仍然在学习,而且我一直忘记重要的细节,这使我很难理解其他代码或示例或使用额外的库。另外,对于我的学校任务,我必须学习与Qt一起工作。因此,现在我试图理解一个面对以下行代码的示例。
头文件中声明了一个FileDialog
类,如下所示:
class FileDialog : public QMainWindow
{
Q_OBJECT
public:
FileDialog(QWidget *parent = 0);
~FileDialog();
private slots:
void changeDirectory();
void fillList();
private:
Ui::FileDialogClass* ui;
QDir directory;
};
在不是主文件的另一个源.cpp文件中,该类的构造函数是这样填充的:
FileDialog::FileDialog(QWidget *parent)
: QMainWindow(parent), ui(new Ui::FileDialogClass), directory("/")
{
ui->setupUi(this);dir
setWindowTitle("Changing Directory");
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(changeDirectory()));
fillList();
}
在这里,我不太清楚这条线
FileDialog::FileDialog(QWidget *parent)
: QMainWindow(parent), ui(new Ui::FileDialogClass), directory("/")
我认为
FileDialog::FileDialog(QWidget *parent) : QMainWindow(parent)
是因为FileDialog
是QMainWindow
类型类而编写的,对吗?但是,为什么我们要添加ui(new Ui::FileDialogClass), directory("/")
呢?还请解释为什么directory()
与字符串"/"
一起传递,是否暗示了程序如何理解哪个目录和哪个文件?我还应该添加如何填充其他两个函数
changeDirectory
和fillList
。void FileDialog::changeDirectory()
{
QString path = QFileDialog::getExistingDirectory(this, tr("Directory"), directory.path());
if ( path.isNull() == false )
{
directory.setPath(path);
fillList();
}
}
void FileDialog::fillList()
{
ui->listWidget->clear();
ui->listWidget->addItems(directory.entryList());
}
如果可能的话,请解释函数
tr()
如何直接在上述代码中工作,我试图阅读文档,但我很明白:(。如果我的问题很傻,请不要打扰?非常感谢。
最佳答案
首先,关于以下部分:
FileDialog::FileDialog(QWidget *parent)
: QMainWindow(parent), ui(new Ui::FileDialogClass), directory("/")
这是一个构造函数初始化列表。在此列表中,您将找到:
QMainWindow(parent)
。 ui
成员使用new Ui::FileDialogClass
初始化。然后,关于
directory
。它是QDir
变量,并使用值"/"
初始化,该值对应于UNIX系统上的根目录。最后,as explained in the Qt documentation,
tr()
是用于国际化的函数(返回所需的翻译,具体取决于应用程序的语言环境/语言集)。关于c++ - 了解C++和Qt?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16732773/