我没有那么多的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)是因为FileDialogQMainWindow类型类而编写的,对吗?但是,为什么我们要添加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()如何直接在上述代码中工作,我试图阅读文档,但我很明白:(。
如果我的问题很傻,请不要打扰?非常感谢。

最佳答案

首先,关于以下部分:

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 documentationtr()是用于国际化的函数(返回所需的翻译,具体取决于应用程序的语言环境/语言集)。

    关于c++ - 了解C++和Qt?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16732773/

    10-09 05:30