1

请认为我是 Qt 的新手。我为按钮单击事件编写了以下代码。

void dbCheck ()
{
    db = QSqlDatabase::addDatabase("QSQLITE");

    QString dbPath(QDir::home().path());

    dbPath.append("/Desktop/jk/sample.sqlite");
    qDebug () <<"Path Name is "<<dbPath;
    .......
}

一段时间后,我将以下行更改为

dbPath.append("/Desktop/jk/Newsample.sqlite");

当我运行代码时,它仍然会打印上一个路径,即sample.sqlite.

我清理了项目,并重建了相同的项目,但没有用,我仍然得到相同的结果。真的很奇怪。

我在这里错过了什么吗?我该如何解决这个问题?有什么与缓存有关的吗?好心提醒。

4

2 回答 2

1

小心混合源内构建和“影子构建”。如果您转到源目录并运行qmakemake. 另一方面,Qt Creator 默认使用单独的构建目录,也就是“影子构建”,当然你也可以自己做。在实践中,这是qmake通过将构建目录创建为源目录的兄弟,去那里并qmake ../myproject在影子构建目录中生成生成文件来完成的。

现在的问题是,make程序实际上并没有单独构建目录的概念,如果您执行了源内构建,那么这些构建的文件也可以访问。然后当你认为你正在做影子构建时,make 会在源目录下找到那些构建的文件并使用它们而不是创建新的。

如果这是问题,以下应该会有所帮助

在 Qt SDK 命令提示符处转到源目录,然后运行

make clean distclean

注意:顺序很重要,distclean也会删除任何makefile,因此必须最后完成。也替换makenmakeormingw32-make或您实际使用的任何内容。如果该命令没有找到生成文件,那么您可能没有在qmake那里运行并且问题是其他问题,但是您可以通过运行qmake生成生成文件来验证这一点,并且make clean distclean可以工作。

如果您使用版本控制(并且没有意外签入生成的文件......),删除额外文件的替代方法是使用版本控制工具从版本控制目录中删除所有额外文件。

于 2013-03-19T12:25:09.133 回答
0

请重新检查您的环境:您真的清除了所有内容吗?确保您没有*.o, moc_*.cpp,ui_*.h来自以前的版本。尝试删除.user文件并重新配置您的项目以构建到不同的文件夹。

此外,您可以通过这种方式使用字符串连接:

QString dbPath = QString("%1%2")
        .arg( QDir::home().path() )
        .arg( "/Desktop/jk/Newsample.sqlite" ) );

Offtop,但不要忘记原生分隔符http://qt-project.org/doc/qt-4.8/qdir.html#separatorhttp://qt-project.org/doc/qt-4.8/qdir .html#toNativeSeparators ) - 如果您编写跨平台软件。

于 2013-03-19T11:41:56.450 回答