3

我在 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()用字符串传递"/",是否提示程序将如何理解哪个是目录,哪个是文件?

我还应该添加其他两个函数是如何填充的changeDirectoryfillList

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()是如何工作的,我尝试阅读文档,但我很明白:(。如果我的问题非常愚蠢,请不要打扰?非常感谢。

4

2 回答 2

2

首先,关于以下部分:

FileDialog::FileDialog(QWidget *parent)
        : QMainWindow(parent), ui(new Ui::FileDialogClass), directory("/")

这是一个构造函数初始化列表。在此列表中,您会发现:

  • 调用基类构造函数:这是QMainWindow(parent).
  • 成员变量的初始化:每个列出的成员变量,用逗号分隔,用指定的值初始化(例如:ui成员用new Ui::FileDialogClass.

那么,大约directory. 它是一个变量,并使用与UNIX 系统上的根目录相对应QDir的值进行初始化。"/"

最后,正如 Qt 文档中所解释的tr()是一个用于国际化的函数(返回所需的翻译,取决于应用程序的区域设置/语言设置)。

于 2013-05-24T10:43:17.917 回答
-4

这是您的第一个 第二个第三个问题的答案。希望能帮助到你。

于 2013-05-24T10:36:40.160 回答