天嵌 ARM开发社区

 找回密码
 注册
查看: 2010|回复: 7

求助:编写qtopia上的程序调用QInputDialog为什么总是提示该类Incomplete错误??

[复制链接]
bravo191 发表于 2010-10-28 22:59:50 | 显示全部楼层 |阅读模式
最近尝试改写编译qtopia上的小例子,想用QInputDialog生成个弹出对话框输入字符串,参考qt2的文档,也照着例子改写添加到按钮响应函数中,类似如下:
  bool ok;
    QString fileName = QInputDialog::getText(tr("Put File:"),
        tr("Please input file name:"), QLineEdit::Normal, QString(), &ok,this);  
    if(ok && !fileName.isEmpty())
    {
       .....
    }
在头文件中也添加了qinputdialog.h,但就是编译的时候老是提示说"QInputDialog" 是Incomplete的,也不是参数错误或者没声明,搞得很郁闷,望大大帮忙解决,非常感谢!!
qt2的库应该没问题,用的是天嵌的安装编译的,qt2库文件中是有QInputDialog.h QInputDialog.cpp的,编译其他小程序都是可以的,后来尝试用qt4编写QInputDialog没有这种问题。望指点!!
天嵌_support1 发表于 2010-10-29 18:20:56 | 显示全部楼层
1# bravo191


把代码贴出来,都贴吧。
把你的错误拷贝贴出来。不要自己翻译嘛。
这样我看了就有些费解。
 楼主| bravo191 发表于 2010-10-30 18:47:43 | 显示全部楼层
我参考的例子是天嵌Qte_20100601.tar.bz2安装包中的first小程序,源程序是点按钮就显示字符串,我现在想点按钮以后弹出一个对话框,用户在对话框中输入字符串,确认之后在主体框中显示输入的字符串。
我看文档说有QInputDialog这个类,可以很方便实现这功能。我就修改了下first.cpp
添加了头文件#include <qinputdialog.h>
修改了void first::user_button()
{
     bool ok=FALSE;
     QString text_show = QInputDialog::getText(tr("Text"),tr("Please input the string:"), QLineEdit::Normal, NULL, &ok,this);  
    if(ok && !fileName.isEmpty())
           user_t->setText( text_show);
}   
还有在first.h中前面加了class QInputDialog;
然后编译提示错误如下:
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o main.o main.cpp
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o first.o first.cpp
first.cpp: In member function ‘virtual void first::user_button()’:
first.cpp:1186: error: incomplete type ‘QInputDialog’ used in nested name specifier
make: *** [first.o] Error 1
不知道问题出在哪里,望版主大大能帮忙解决下,非常感谢!!!
 楼主| bravo191 发表于 2010-11-1 00:44:03 | 显示全部楼层
大大们快来指点下哈~~~
天嵌_support1 发表于 2010-11-1 11:39:00 | 显示全部楼层
3# bravo191


还有在first.h中前面加了class QInputDialog;
这个是做什么用呢?你的意思?
 楼主| bravo191 发表于 2010-11-2 00:21:52 | 显示全部楼层
本帖最后由 bravo191 于 2010-11-2 00:23 编辑

刚开始我只在first.cpp前加上头文件#include <qinputdialog.h>,修改void first::user_button()以后,编译仍然提示class QInputDialog没有声明,然后我看到在first例子中,QLabel、QPushButton这些在调用时既在first.cpp中添加相关头文件qlabel.h qpushbutton.h,又在first.h中最前面添加如下代码:
#ifndef FIRST_H
#define FIRST_H
#include <qvariant.h>
#include <qwidget.h>
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QLabel;
class QPushButton;
class first : public QWidget
{...
}
然后我就照样子也在其中加入了“class QInputDialog;”重新编译之后,没有提示class QInputDialog未申明,而是出现上面我提到的first.cpp:1186: error: incomplete type ‘QInputDialog’ used in nested name specifier的错误。我现在还是没搞懂问题出在哪里。
希望版主帮忙解决下,或者有在qtopia上用过QInputDialog的大大,解答下到底这个类该如何正常使用,非常感谢!!
天嵌_support1 发表于 2010-11-2 11:51:15 | 显示全部楼层
6# bravo191


回复 你原来的 #include <qinputdialog.h>就可以了
把编译信息贴出来。
 楼主| bravo191 发表于 2010-11-3 00:04:50 | 显示全部楼层
本帖最后由 bravo191 于 2010-11-3 00:06 编辑

哦,我把first.h中的class QInputDialog去掉以后重新编译,提示如下:
[root@fedora first]# make
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o main.o main.cpp
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qt2/include -I/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include -o first.o first.cpp
first.cpp: In member function ‘virtual void first::user_button()’:
first.cpp:1186: error: ‘QInputDialog’ has not been declared
make: *** [first.o] Error 1

1186行就是QString text_show = QInputDialog::getText(tr("Text"),tr("Please input the string:"), QLineEdit::Normal, NULL, &ok,this);  
继续请教版主。
您如果方便的话,也可以写个例子在您机器上编译看是否能通过,非常感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 01:25 , Processed in 1.024454 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表