私はQt 4.7のC++チュートリアルを終了し、QTreeViewの機能の一部を拡張するプロジェクトを開始しました。既存のQtクラスからクラスを作成する
私は次の操作を実行しようとしています:
- プログラムの確保がQTreeView
- コピーを使用して正常に動作し、.. \ SRC \ GUI \ itemviews \ qtreeview.cpp、qtreeviewに基づいて新しいファイルを貼り付けます.H、および
私はMSVCを使用して、次の警告を(取得しています(.PROファイルを含む)各ファイル名には、各ファイルの中に "QTreeView" を "CustomTreeView" を置き換える
.\CustomTreeView.cpp(147) : warning C4273: 'CustomTreeView::CustomTreeView' : inconsistent dll linkage
c:\home\jetimms\code\projects\CustomTreeViewTest\CustomTreeView.hpp(31) : see previous definition of '{ctor}'
これらの警告はさらに多くありますが、上記と同じように見えます。
また、私はこれらのエラーを持っている:
.\CustomTreeView.cpp(1216) : error C2248: 'NoState' : cannot access protected enumerator declared in class 'QAbstractItemView'
c:\qt\4.7.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(304) : see declaration of 'NoState'
c:\qt\4.7.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(63) : see declaration of 'QAbstractItemView'
.\CustomTreeView.cpp(1216) : error C2248: 'EditingState' : cannot access protected enumerator declared in class 'QAbstractItemView'
c:\qt\4.7.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(307) : see declaration of 'EditingState'
c:\qt\4.7.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(63) : see declaration of 'QAbstractItemView'
以上がCustomTreeViewとQTreeViewを置き換える以外は変更せずに(qtreeview.hに)以下の等価不満される:
bool QTreeViewPrivate::expandOrCollapseItemAtPos(const QPoint &pos)
{
Q_Q(QTreeView);
// we want to handle mousePress in EditingState (persistent editors)
if ((state != QAbstractItemView::NoState
&& state != QAbstractItemView::EditingState)
|| !viewport->rect().contains(pos))
return true;
int i = itemDecorationAt(pos);
if ((i != -1) && itemsExpandable && hasVisibleChildren(viewItems.at(i).index)) {
if (viewItems.at(i).expanded)
collapse(i, true);
else
expand(i, true);
if (!isAnimating()) {
q->updateGeometries();
viewport->update();
}
return true;
}
return false;
}
これらの新しいファイルをSOURCESとHEADERSの.proファイルに含めました。上記の警告には、コンストラクタの追加バージョンは含まれていません。
を更新:20110710_1339
bool CustomTreeViewPrivate::expandOrCollapseItemAtPos(const QPoint &pos) {
Q_Q(CustomTreeView);
// we want to handle mousePress in EditingState (persistent editors)
if ((state != QAbstractItemView::NoState
&& state != QAbstractItemView::EditingState)
|| !viewport->rect().contains(pos))
return true;
int i = itemDecorationAt(pos);
if ((i != -1) && itemsExpandable && hasVisibleChildren(viewItems.at(i).index)) {
if (viewItems.at(i).expanded)
collapse(i, true);
else
expand(i, true);
if (!isAnimating()) {
q->updateGeometries();
viewport->update();
}
return true;
}
return false;
}
を更新:ここで
20110710_0926にエラーが発生し、実際のコードで、私は以前のように(、qmakeは使用してコンパイルしようとした
)私のカスタムクラスを.. \ src \ gui \ itemviews \のqtreeviewファイルに置き換えると、私は非常によく似た警告を受けました。 「{CTOR}」の
c:\Qt\4.7.0\src\gui\itemviews\qtreeview.cpp(187) : warning C4273: 'QTreeView::QTreeView' : inconsistent dll linkage
c:\qt\4.7.0\src\gui\itemviews\qtreeview.h(74) : see previous definition
は
このしようとして表示された唯一の誤差があり、それが関係している(オンザフライでコンパイルされているmoc_qtreeview.cpp?):
C:\home\jetimms\code\projects\cashflow\debug\moc_qtreeview.cpp(95) : error C2491: 'QTreeView::staticMetaObject' : definition of dllimport static data member not allowed
警告の原因に関連するものがあればわかりません。ここでは、コードのsnippitは次のとおりです。
const QMetaObject QTreeView::staticMetaObject = {
{ &QAbstractItemView::staticMetaObject, qt_meta_stringdata_QTreeView,
qt_meta_data_QTreeView, 0 }
};
私はちょうどそれは奇妙なQTreeViewが、私は彼らと一緒に構築しようとするとエラー出力ファイル自体ことがわかります。
とにかく、QTreeViewのコンストラクタが既に定義されているという警告が表示されます。私はすべてのヘッダファイルについて警備員を抱えているので、QTreeViewが2回定義されたと思うとは思えません。更新
:20110710_1612
をここではQTreeViewの定義とQTreeView.hの始まりです。 QAbstractItemView.hを含み、それから継承することに注意してください。
#include <QtGui/qabstractitemview.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Gui)
#ifndef QT_NO_TREEVIEW
class QTreeViewPrivate;
class QHeaderView;
class Q_GUI_EXPORT QTreeView : public QAbstractItemView
{
...
私のカスタムクラスはまったく同じ方法でそれを継承します。更新
#include <QtGui/qabstractitemview.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Gui)
#ifndef QT_NO_TREEVIEW
class CustomTreeViewPrivate;
class QHeaderView;
class Q_GUI_EXPORT CustomTreeView : public QAbstractItemView
{
:20110710_1757
をそれは私がQTreeViewからコピーしたコードは、ライブラリのためであると私は、私のアプリのためだけの.exeファイルをライブラリーを構築しておりませんことを私に夜が明けました。 Q_GUI_EXPORTを(上の)コンストラクタから削除し、私が経験していた警告がなくなった。
は、今私はmoc_CustomTreeView.cppファイルを扱うエラーを取得しています(このような全てにおいて、3つのエラー、すべてがあります):
case 16: d_func()->_q_endAnimatedOperation(); break;
:
debug\moc_CustomTreeView.cpp(140) : error C2027: use of undefined type 'CustomTreeViewPrivate'
c:\home\jetimms\code\projects\cashflow\debug\../CustomTreeView.hpp(12) : see declaration of 'CustomTreeViewPrivate'
debug\moc_CustomTreeView.cpp(140) : error C2227: left of '->_q_endAnimatedOperation' must point to class/struct/union/generic type
はここで問題のあるコードですmoc_ファイルエラーについて何をすべきか分かりません。 d_func()はCustomTreeViewPrivateインスタンスを取得しますが、moc_ファイルのスコープはそれを見ることができません。
を更新:20110710_1757
を私はmoc_ファイルや開発のQtの道を理解するために周りを見回したとこれら二つのを見つけました。 KDE Techbase Policies/Library Code Policy Qtコードをそのままプライベートクラスなどを使って記述する理由を説明しています。
また、moc_コードが上記のようなエラー(rerun qmake)、Using the Meta-Object Compiler (moc)を与えたときの対処方法についても説明しています。私はこれを試して、上記のmoc_エラーは消えて、今私はこれらを提示されます。
さて、私は、CustomTreeViewの名前をSummaryDrillDownTreeView2に変更しました。
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall QAbstractItemViewPrivate::~QAbstractItemViewPrivate(void)" ([email protected]@[email protected]) referenced in function [email protected]@[email protected]$0
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: __thiscall QAbstractItemViewPrivate::QAbstractItemViewPrivate(void)" ([email protected]@[email protected]) referenced in function "public: __thiscall SummaryDrillDownTreeView2Private::SummaryDrillDownTreeView2Private(void)" ([email protected]@[email protected])
SummaryDrillDownTreeView2.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall QAbstractItemViewPrivate::_q_rowsRemoved(class QModelIndex const &,int,int)" ([email protected]@@[email protected]@[email protected])
SummaryDrillDownTreeView2.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall QAbstractItemViewPrivate::_q_columnsInserted(class QModelIndex const &,int,int)" ([email protected]@@[email protected]@[email protected])
SummaryDrillDownTreeView2.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall QAbstractItemViewPrivate::_q_layoutChanged(void)" ([email protected]@@UAEXXZ)
SummaryDrillDownTreeView2.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall QAbstractItemViewPrivate::selectAll(class QFlags<enum QItemSelectionModel::SelectionFlag>)" ([email protected]@@[email protected]@[email protected]@@@@Z)
SummaryDrillDownTreeView2.obj : error LNK2001: unresolved external symbol "public: virtual enum QAbstractItemView::DropIndicatorPosition __thiscall QAbstractItemViewPrivate::position(class QPoint const &,class QRect const &,class QModelIndex const &)const " ([email protected]@@[email protected]@@[email protected]@[email protected]@[email protected]@@Z)
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: void __thiscall QAbstractItemViewPrivate::doDelayedItemsLayout(int)" ([email protected]@@[email protected]) referenced in function "public: void __thiscall SummaryDrillDownTreeView2::setRowHidden(int,class QModelIndex const &,bool)" ([email protected]@@[email protected]@[email protected])
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: void __thiscall QAbstractItemViewPrivate::interruptDelayedItemsLayout(void)const " ([email protected]@@QBEXXZ) referenced in function "public: void __thiscall SummaryDrillDownTreeView2::expandAll(void)" ([email protected]@@QAEXXZ)
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall QAbstractItemViewPrivate::_q_modelDestroyed(void)" ([email protected]@@UAEXXZ) referenced in function "public: virtual void __thiscall SummaryDrillDownTreeView2Private::_q_modelDestroyed(void)" ([email protected]@@UAEXXZ)
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: virtual class QList<struct QPair<class QRect,class QModelIndex> > __thiscall QAbstractItemViewPrivate::draggablePaintPairs(class QList<class QModelIndex> const &,class QRect *)const " ([email protected]@@[email protected][email protected]@@[email protected]@@@@@[email protected]@@@@[email protected]@@Z) referenced in function "public: virtual class QList<struct QPair<class QRect,class QModelIndex> > __thiscall SummaryDrillDownTreeView2Private::draggablePaintPairs(class QList<class QModelIndex> const &,class QRect *)const " ([email protected]@@[email protected][email protected]@@[email protected]@@@@@[email protected]@@@@[email protected]@@Z)
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: class QStyleOptionViewItemV4 __thiscall QAbstractItemViewPrivate::viewOptionsV4(void)const " ([email protected]@@[email protected]@XZ) referenced in function "protected: void __thiscall SummaryDrillDownTreeView2::drawTree(class QPainter *,class QRegion const &)const " ([email protected]@@[email protected]@[email protected]@@Z)
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: struct QEditorInfo __thiscall QAbstractItemViewPrivate::editorForIndex(class QModelIndex const &)const " ([email protected]@@[email protected]@[email protected]@@Z) referenced in function "protected: virtual void __thiscall SummaryDrillDownTreeView2::drawRow(class QPainter *,class QStyleOptionViewItem const &,class QModelIndex const &)const " ([email protected]@@[email protected]@[email protected]@[email protected]@@Z)
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: void __thiscall QFramePrivate::updateStyledFrameWidths(void)" ([email protected]@@QAEXXZ) referenced in function "public: void __thiscall SummaryDrillDownTreeView2Private::initialize(void)" ([email protected]@@QAEXXZ)
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall QAbstractItemViewPrivate::_q_columnsAboutToBeRemoved(class QModelIndex const &,int,int)" ([email protected]@@[email protected]@[email protected]) referenced in function "public: virtual void __thiscall SummaryDrillDownTreeView2Private::_q_columnsAboutToBeRemoved(class QModelIndex const &,int,int)" ([email protected]@@[email protected]@[email protected])
SummaryDrillDownTreeView2.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall QAbstractItemViewPrivate::_q_columnsRemoved(class QModelIndex const &,int,int)" ([email protected]@@[email protected]@[email protected]) referenced in function "public: virtual void __thiscall SummaryDrillDownTreeView2Private::_q_columnsRemoved(class QModelIndex const &,int,int)" ([email protected]@@[email protected]@[email protected])
debug\cashflow.exe : fatal error LNK1120: 16 unresolved externals
QTreeViewから継承する2番目のアプローチを別の質問に移します。これは私の現在の問題です。 – jetimms