0

刚开始使用 qt,浏览了文档、谷歌、示例等。试图找到简单的示例(请注意),这些示例展示了如何自己做(恕我直言)简单的事情。好吧,我偶然发现了我的答案,我想知道随着代码变得更加复杂,这种方法是否会在以后引起问题。此示例包含的内容比所需的要多,但这是直接来自工作代码。mainwindow.h:我添加了

private slots:
    void vpkButton_clicked();

在 Ui::MainWindow *ui; 之后 我添加了 QLineEdit *vpkPathTxt; 在 mainwindow.cpp 中:之后

    ui->setupUi(this);

我加了

    connect( this->ui->vpkButton, SIGNAL( clicked() ), this, SLOT(vpkButton_clicked()) );

要将我的 ui 按钮连接到正确的插槽,问题是从 vpkButton_clicked() 获取字符串以显示在我在设计器中进行的行编辑中,最终对我有用的是接下来添加以下内容:

    vpkPathTxt = this->ui->vpkPathTxt;

我的 main.cpp 中的函数变得非常简单:(顶部外部空白处的 QString 声明)

void MainWindow::vpkButton_clicked()
{
    vpkName = QFileDialog::getOpenFileName(this,
        tr("Open VPK File"), "~/", tr("VPK Files (*_dir.vpk)"));
    vpkPathTxt->setText(vpkName);
    qDebug() << vpkName;
}

我问的原因是因为它似乎有点太容易可靠了,事实上我还没有看到它这样做过,欢迎任何输入谢谢

4

1 回答 1

0

您的插槽的一个问题是您没有考虑用户丢弃“打开文件”对话框的情况。在这种情况下,该函数返回一个空 QString,因此您应该只在返回值不是空字符串QFileDialog::getOpenFileName时继续执行您的逻辑:

if (!vpkName.isNull()) {
    ...
}

第二个问题如下,我做了一些假设,因为我没有看到你的完整代码:

我猜您想使用用户在对话框中选择的文件名加载文件。但是你也可以在行编辑中设置文件名,用户可以手动编辑。我还猜想实际的文件加载发生在不同的步骤中(即单击另一个按钮后),因此在用户在行编辑中手动编辑文件名后,它与您的本地变量中的不同vpkName

加载文件时,我会读取行编辑的内容而不是变量vpkName,因此将尊重手工进行的编辑。

另一种方法是同时观察行编辑的编辑并反映变量中的变化。然后在稍后加载文件时读取变量而不是行编辑就可以了。

于 2013-12-11T20:15:49.343 回答