2

基本的に、私はQtアプリを書いています。以前は問題なく動作していましたが、いくつかのファイル名を再構成して以来 (具体的には、ずっと前に mainwindow.h と .cpp という名前のファイルがありました。それぞれ net.h と .cpp に名前を変更し、最近変更しました) mainwindow.h および .cpp に戻る)、(実行時に) いくつかのエラーで失敗します。

Object::connect: No such slot QWidget::slotName()
Object::disconnect: No such signal QWidget::iconSizeChanged(QSize)
Object::disconnect: No such signal QWidget::toolButtonStyleChanged(Qt::ToolButtonStyle)
Object::connect: No such signal QWidget::iconSizeChanged(QSize)
Object::connect: No such signal QWidget::toolButtonStyleChanged(Qt::ToolButtonStyle)

クラス内に登録した唯一のスロットは、最初の slotName です。私のクラス(QWidgetをサブクラス化する)ではなく、QWidgetのメンバーとしてリストされている理由がわかりません。moc_mainwindow.cpp ファイル内で見つけたので、正しく宣言されていることはわかっています。はい、クラス定義に Q_OBJECT があります。

実行中に 1 秒に 1 回、別のエラーも発生します。

QWidget::metric: Invalid metric command
QPainter::begin: Paint device returned engine == 0, type: 143256176

私が言ったように、これはすべて完全に機能していました。QMakeのキャッシュの問題だと思います。すべての moc ファイルの削除、プロジェクト ファイルの削除、プロジェクト ファイルの空化、新しい空の Makefile の生成などを試みました。何かアイデアはありますか?

4

1 に答える 1

3

バージョン管理なしでコードを開発するべきではありません。バージョン管理システムを活用して作業コピーをクリーンアップするか、新しい場所にチェックアウトしてそこで再コンパイルします。そうすれば、誰が何を知っているかを責めることはありません。

バージョン管理がない場合は、プロジェクトをファイルごとに手動で新しい場所にコピーし、選択した新しいバージョン管理リポジトリ (ローカルのもの!) にコミットして、そこでコンパイルします。

Qt Creator はシャドウ ビルド (つまり、ソース フォルダー内にないビルド) をデフォルトとしていることに注意してください。シャドウ ビルドのワイプは簡単です。ソース フォルダーの 1 つ上のディレクトリに移動し、プロジェクトの名前で始まる長い名前のフォルダーを探します。それを一掃すると、いかなる種類の「キャッシュ」もないことが保証されます。

また、QMake にはキャッシュがまったくないことにも注意してください。入力で指定されたすべてのファイル (.pro とそのインクルード) を再読み取りし、すべての Makefile を最初から再作成します。実行qmake && make cleanしてクリーンアップすることはできますが、これは異なる構成のプロジェクトからのファイルを処理しません。悲しいかな、そのようなファイルはとにかく干渉すべきではありません。

于 2012-06-25T02:34:00.277 に答える