• 5903阅读
  • 8回复

Qt+SQLite遇到的问题 [复制链接]

上一主题 下一主题
离线kaede
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-18
编了个qt3+sqlite3的小测试程序,试验能否打开连接数据库
遇到了如下问题
[root@localhost test-qt3-sqlite3]# make
Makefile:146: warning: overriding commands for target `.obj/mainform.o'
Makefile:135: warning: ignoring old commands for target `.obj/mainform.o'
Makefile:152: warning: overriding commands for target `.obj/moc_mainform.o'
Makefile:149: warning: ignoring old commands for target `.obj/moc_mainform.o'
Makefile:158: warning: overriding commands for target `.moc/moc_mainform.cpp'
Makefile:155: warning: ignoring old commands for target `.moc/moc_mainform.cpp'
g++  -o test-sqlite.out .obj/main.o .obj/mainform.o .obj/mainform.o .obj/moc_mainform.o .obj/moc_mainform.o  -L/usr/lib/qt-3.1/lib -L/usr/X11R6/lib -L/usr/local/sqlite3/lib -lsqlite3 -lqt-mt -lXext -lX11 -lm
.obj/mainform.o(.text+0x0): In function `MainForm::MainForm[not-in-charge](QWidget*, char const*, bool, unsigned)':
.ui/mainform.cpp:29: multiple definition of `MainForm::MainForm[not-in-charge](QWidget*, char const*, bool, unsigned)'
.obj/mainform.o(.text+0x0):.ui/mainform.cpp:29: first defined here
.obj/mainform.o(.text+0x3b0): In function `MainForm::languageChange()':
.ui/mainform.cpp:57: multiple definition of `MainForm::languageChange()'
.obj/mainform.o(.text+0x3b0):.ui/mainform.cpp:57: first defined here
.obj/mainform.o(.text+0x190): In function `MainForm::MainForm[in-charge](QWidget*, char const*, bool, unsigned)':
.ui/mainform.cpp:29: multiple definition of `MainForm::MainForm[in-charge](QWidget*, char const*, bool, unsigned)'
.obj/mainform.o(.text+0x190):.ui/mainform.cpp:29: first defined here
.obj/mainform.o(.text+0x320): In function `MainForm::~MainForm [not-in-charge]()':
.ui/mainform.cpp:48: multiple definition of `MainForm::~MainForm [not-in-charge]()'
.obj/mainform.o(.text+0x320):.ui/mainform.cpp:48: first defined here
.obj/mainform.o(.text+0x350): In function `MainForm::~MainForm [in-charge]()':
.ui/mainform.cpp:48: multiple definition of `MainForm::~MainForm [in-charge]()'
.obj/mainform.o(.text+0x350):.ui/mainform.cpp:48: first defined here
.obj/mainform.o(.text+0x380): In function `MainForm::~MainForm [in-charge deleting]()':
.ui/mainform.cpp:48: multiple definition of `MainForm::~MainForm [in-charge deleting]()'
.obj/mainform.o(.text+0x380):.ui/mainform.cpp:48: first defined here
.obj/moc_mainform.o(.text+0x0): In function `MainForm::className() const':
.moc/moc_mainform.cpp:20: multiple definition of `MainForm::className() const'
.obj/moc_mainform.o(.text+0x0):.moc/moc_mainform.cpp:20: first defined here
.obj/moc_mainform.o(.data+0x0): multiple definition of `MainForm::metaObj'
.obj/moc_mainform.o(.data+0x0): first defined here
.obj/moc_mainform.o(.text+0x10): In function `MainForm::tr(char const*, char const*)':
.moc/moc_mainform.cpp:29: multiple definition of `MainForm::tr(char const*, char const*)'
.obj/moc_mainform.o(.text+0x10):.moc/moc_mainform.cpp:29: first defined here
.obj/moc_mainform.o(.text+0x80): In function `MainForm::trUtf8(char const*, char const*)':
.moc/moc_mainform.cpp:37: multiple definition of `MainForm::trUtf8(char const*,
char const*)'
.obj/moc_mainform.o(.text+0x80):.moc/moc_mainform.cpp:37: first defined here
.obj/moc_mainform.o(.text+0xf0): In function `MainForm::staticMetaObject()':
.moc/moc_mainform.cpp:48: multiple definition of `MainForm::staticMetaObject()'
.obj/moc_mainform.o(.text+0xf0):.moc/moc_mainform.cpp:48: first defined here
.obj/moc_mainform.o(.text+0x190): In function `MainForm::qt_cast(char const*)':
.moc/moc_mainform.cpp:70: multiple definition of `MainForm::qt_cast(char const*)'
.obj/moc_mainform.o(.text+0x190):.moc/moc_mainform.cpp:70: first defined here
.obj/moc_mainform.o(.text+0x200): In function `MainForm::qt_invoke(int, QUObject*)':
.moc/moc_mainform.cpp:77: multiple definition of `MainForm::qt_invoke(int, QUObject*)'
.obj/moc_mainform.o(.text+0x200):.moc/moc_mainform.cpp:77: first defined here
.obj/moc_mainform.o(.text+0x260): In function `MainForm::qt_emit(int, QUObject*)':
.moc/moc_mainform.cpp:87: multiple definition of `MainForm::qt_emit(int, QUObject*)'
.obj/moc_mainform.o(.text+0x260):.moc/moc_mainform.cpp:87: first defined here
.obj/moc_mainform.o(.text+0x290): In function `MainForm::qt_property(int, int, QVariant*)':
.moc/moc_mainform.cpp:93: multiple definition of `MainForm::qt_property(int, int, QVariant*)'
.obj/moc_mainform.o(.text+0x290):.moc/moc_mainform.cpp:93: first defined here
.obj/moc_mainform.o(.text+0x2c0): In function `MainForm::qt_static_property(QObject*, int, int, QVariant*)':
.moc/moc_mainform.cpp:97: multiple definition of `MainForm::qt_static_property(QObject*, int, int, QVariant*)'
.obj/moc_mainform.o(.text+0x2c0):.moc/moc_mainform.cpp:97: first defined here
collect2: ld returned 1 exit status
make: *** [test-sqlite.out] Error 1
源程序如下:
#include "mainform.h"
#include <qvariant.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qimage.h>
#include <qpixmap.h>
/*
* Constructs a MainForm as a child of 'parent', with the
* name 'name' and widget flags set to 'f'.
*
* The dialog will by default be modeless, unless you set 'modal' to
* TRUE to construct a modal dialog.
*/
MainForm::MainForm( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl )
{
if ( !name )
setName( "MainForm" );
showMsgLineEdit = new QLineEdit( this, "showMsgLineEdit" );
showMsgLineEdit->setGeometry( QRect( 150, 230, 350, 21 ) );
openButton = new QPushButton( this, "openButton" );
openButton->setGeometry( QRect( 150, 70, 91, 30 ) );
languageChange();
resize( QSize(600, 480).expandedTo(minimumSizeHint()) );
// signals and slots connections
connect( openButton, SIGNAL( clicked() ), this, SLOT( openDBSlot() ) );
}
/*
* Destroys the object and frees any allocated resources
*/
MainForm::~MainForm()
{
// no need to delete child widgets, Qt does it all for us
}
/*
* Sets the strings of the subwidgets using the current
* language.
*/
void MainForm::languageChange()
{
setCaption( tr( "A test Showing how to connect SQLite3 in QT3" ) );
openButton->setText( tr( "Open DB" ) );
}
void MainForm::openDBSlot()
{
//qWarning( "MainForm::openDBSlot(): Not implemented yet" );

sqlite3 *db=NULL;
int rc;
rc = sqlite3_open("zieckey.db", &db); if( rc )
{
QString errMsgQString;
errMsgQString.sprintf("Can't open database: %s\n", sqlite3_errmsg(db) );
showMsgLineEdit->setText(errMsgQString);
sqlite3_close(db);
}
else
showMsgLineEdit->setText( "open zieckey.db successfully!\n" );
sqlite3_close(db); }
请问是哪里出错了?
顺便问下,在.h文件中,我加了sqlite3.h这个头文件,而sqlite3.h这个文件在其他文件夹下,我没有设置成全局的环境变量,会出问题吗?提前谢了...

离线sy1413

只看该作者 1楼 发表于: 2011-04-18
为什么不用QSqlDatabase???/
hello world!
离线dragonfever
只看该作者 2楼 发表于: 2011-04-18
回 楼主(kaede) 的帖子
我的程序也出现类似问题,解决方法:
把源程序中的#include <qvariant.h>注释掉
因为 mainform.h中应该已经有这个头文件的声明,这会产生重复定义的问题
我的是这样解决的,楼主可以尝试以下
离线kaede
只看该作者 3楼 发表于: 2011-04-18
回 2楼(dragonfever) 的帖子
你好,我把那句注释掉后,重新qmake 和 make,但还是出现上述的问题,有别的方法吗?
"sqlite3.h" 直接这样加在前面可以吗?它和项目不再同一个文件夹下
离线dragonfever
只看该作者 4楼 发表于: 2011-04-18
回 3楼(kaede) 的帖子
make clean了没有?
头文件"sqlite3.h"我只在槽函数设计的那个.ui.h文件中声明就可以了
离线kaede
只看该作者 5楼 发表于: 2011-04-19
回 4楼(dragonfever) 的帖子
我先注释掉那句,然后
make clean
qmake
make
还是出现原来的错误,求指点...
离线dragonfever
只看该作者 6楼 发表于: 2011-04-20
回 5楼(kaede) 的帖子
我运行成功的那个工程文件打包传上来,你可以对比其中的.cpp,.ui.h,.h文件中的关键点,这样应该会发现些问题,我的就是这么搞定的
附件: test-sqlite.tar.gz (101 K) 下载次数:13
离线kaede
只看该作者 7楼 发表于: 2011-04-24
回 6楼(dragonfever) 的帖子
多谢你的Help,现在已经能连通sqlite3了,问题出在.pro文件里,需将SOURCES中的.cpp删掉一个
但是还有个问题,就是我想把数据库的查询结果放在放在一个lineEdit类似的控件里,是不是通过sqlite3自带的那些函数不能实现?
求解...
离线dragonfever
只看该作者 8楼 发表于: 2011-04-24
我是菜鸟,我现在也是这个问题解决不了,正在纠结中,我的前两天发的帖子:
http://www.qtcn.org/bbs/read.php?tid=36069
http://www.qtcn.org/bbs/read.php?tid=36154
中有这部分的一些设计思路和代码,编译通过,但终端运行时,总出问题,觉得还是代码哪里出了问题,还在摸索中。。。
楼上如果没有找到解决的路子,可以参考下我设计的一些思路,如果有解决的办法,恳请告知,不胜感激!!
快速回复
限100 字节
 
上一个 下一个