qt4环境下跑qt3程序的遇到的小问题

【Qt系列教程】一、认识Qt、安装Qt、运行Hello Qt Qt 是一个跨平台应用程序开发框架,主要使用 C++ 和 QML 进行开发,并支持 Python。Qt6 于 2020 年发布,带来了对 C++17 的支持、新的图形架构 RHI 等多项改进。通过在线安装器下载并安装 Qt 后,可以使用 Qt Creator 创建并运行一个简单的 "Hello World" 项目 阅读详情

qt4环境下跑qt3程序的遇到的小问题

 

参考资料:<<C++ GUI Programming with Qt 3 >>英文版

 

 1 今天跑了书上一个例子,是QT3写的,但我只有QT4的环境,所以出现了一点问题~~一开始没有看QT4的文档

看如何运行QT3的程序,所以直接看API修改源代码,代码如下(QT4环境下运行QT3程序的方法见下面2)

#include <iostream>

//这是<<C++ GUI Programming with Qt 3 >>书上一个例子,因为我机器上的QT版本是4.2.2,结果
//
编译起来接口不一致,弄的好烦~~好不容易看了API改的程序能跑起来了~~还是有点小问题,没时间,现不改了

#include <QChar>
#include <QDir>
#include <QString>
#include <QStringList>

using namespace std;

int imageSpace(const QString &path) {
    QDir dir(path);
    QStringList::Iterator it;
    int size = 0;

    const QString qs("*.jpg");
    const QStringList st(qs);
    //const QString qs1(" *.png");
    //const QString qs2(" *.jpeg");
    //st.join(qs1);
    //st.join(qs2);

   
    QStringList files = dir.entryList(st,
                                      QDir::Files);


    it = files.begin();

    while (it != files.end()) {
        size += QFileInfo(path, *it).size();
        ++it;
    }

    cout << "size-->" << size << endl;

    QStringList dirs = dir.entryList(QDir::Dirs);
    it = dirs.begin();
    while (it != dirs.end()) {
        if (*it != "." && *it != "..")
            size += imageSpace(path + "/" + *it);
        ++it;
    }
    return size;
}

void printQString(QString s) {
    const QChar* c = s.unicode();
    int i=0;
    while (true) {
        if (c[i].toLatin1()!='/0') {
            cout << c[i].toLatin1();
        } else {
            cout << "/n";
            break;
        }
        i++;
    }
}

 

int main(int argc, char *argv[]) {


  //QT3
中的currentDirPath()--->QT4的currentPath()
  QString path = QDir::currentPath();


    if (argc > 1)
        path = argv[1];

    cout << "Space used by images in " ;

 //QT4找不到QString的path.ascii()方法,只能自己写了个printQString函数打印QString调试,烦死了!(可能我没找到)
 printQString(path);

    cout << " and its subdirectories is "
    << (imageSpace(path) / 1024) << " KB" << endl;

    return 0;
}

 

 

2 看了QT4.2.2的文档,发现可以用QT4来编译QT3的程序的

Add the line QT += qt3support to your .pro file if you use qmake; otherwise, edit your makefile or project file to link against the Qt3Support library and add -DQT3_SUPPORT to your compiler flags. (You might also need to specify other libraries. See What's New in Qt 4 for details.)

就是在qmake -project 生成的XX.pro文件只能够加上一行QT += qt3support


 

######################################################################
# Automatically generated by qmake (2.01a) ??? ?? 5 20:03:41 2007
######################################################################

TEMPLATE = app
TARGET =
DEPENDPATH += . release
INCLUDEPATH += .

QT += qt3support       //就是这行

# Input
SOURCES += ImageSpace.cpp release/HelloQT.cpp

 

然后qmake ,最后make 就行了(QT3的程序代码如下)

#include <iostream>
#include <QDir>

using namespace std;

int imageSpace(const QString &path)
{
    QDir dir(path);
    QStringList::Iterator it;
    int size = 0;

    QStringList files = dir.entryList("*.png *.jpg *.jpeg",
                                      QDir::Files);
    it = files.begin();
    while (it != files.end()) {
        size += QFileInfo(path, *it).size();
        ++it;
    }

    QStringList dirs = dir.entryList(QDir::Dirs);
    it = dirs.begin();
    while (it != dirs.end()) {
        if (*it != "." && *it != "..")
            size += imageSpace(path + "/" + *it);
        ++it;
    }
    return size;
}


int main(int argc, char *argv[]) {
    QString path = QDir::currentDirPath();
    if (argc > 1)
        path = argv[1];

    cerr << "Space used by images in " << endl
    << path.ascii() << endl
    << "and its subdirectories is"
    << (imageSpace(path) / 1024) << " KB" << endl;

    return 0;
}


 

但是程序运行后,没有任何显示?(解决方法看3)

3 因为程序编译没有问题,链接也没有问题~~那问题出在哪里呢?

我猜想可能出现链接的参数上面

g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runt
ime-pseudo-reloc -Wl,-subsystem,windows -o "debug/__GUI_Programming_with_Qt3.exe
" debug/ImageSpace.o debug/HelloQT.o  -L"d:/Qt/4.2.2/lib" -lmingw32 -lqtmaind -l
Qt3Supportd4 -lQtGuid4 -lQtCored4

就是这个参数作怪,这个是qmake自动生成~~只要把这行去掉,程序运行就没有问题了!

-Wl表示这个参数是是gcc编译器传给连接器的参数。(这个参数在网上没有查找到意思,希望知道的兄弟回个帖)

其他几个传给连接器的参数,我在网上找了下资料(只找到下面几个)

--disable-stdcall-fixup

If the link finds a symbol that it cannot resolve, it will attempt to do "fuzzy linking" by looking for another defined symbol that differs only in the format of the symbol name (cdecl vs stdcall) and will resolve that symbol by linking to the match. For example, the undefined symbol _foo might be linked to the function _foo@12, or the undefined symbol _bar@16 might be linked to the function _bar. When the linker does this, it prints a warning, since it normally should have failed to link, but sometimes import libraries generated from third-party dlls may need this feature to be usable. If you specify `--enable-stdcall-fixup', this feature is fully enabled and warnings are not printed. If you specify `--disable-stdcall-fixup', this feature is disabled and such mismatches are considered to be errors.

4 最后程序运行正常!

Space used by images in
D:/Qt/__GUI_Programming_with_Qt3/debug
and its subdirectories is109 KB

 

 

Linux下打包发布QT程序,并运行在其他没有安装QT环境的linux系统上 第一次用QT开发程序并打包发布到任意Linux系统上,期间踩了很多坑,最后目标达成,付出艰辛之后取得的成绩才更可贵啊,现将过程及问题总结一下,希望有相同需求的朋友少走点弯路。 网上有很多Linux下QT打包发布的方法,介绍比较多的是利用打包脚本(pack.sh)进行打包,以文章https://blog.youkuaiyun.com/qq_27350133/article/details/83445258为典型,介绍较为清晰,然而当我用这种方式打包发布后在没有安装qt环境的其他Linux机器上,程序并不能正常运行,还是 阅读详情

相关推荐

Qt之Qt4和Qt5的环境变量区别(QPA和QWS)

在arm板上配置Qt4应用程序的环境变量的时候,发现一般都是 export QTDIR=/usr/local/qte export QWS_MOUSE_PROTO="tslib:/dev/input/event0" export QWS_...

朗朗上口就行啦的博客 6464

Qt3和Qt4版本差异带来的问题和解决方法

版权声明请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。 Qt3和Qt4两个版本存在很大的差异,这也给我们使用带来了很大的挑战。下面我结合一下我在实际编程过程中遇到的问题来总结一下如何更好的使用Qt3和Qt4两个版本来进行编程。Qt的版本不断更新,现在最新的版本是4.6。 1. 首先是系统平台的差异。

我一路走来--- 7089

ubunntu 12.04 安装QT 4.5.3 (QT 4.5.3 开发环境的搭建)

windows:参考如下文档 http://download.youkuaiyun.com/detail/trustguan/4943897 前续 下面就是搭建Qt开发平台了,我的平台是ubuntu 12.04,需要的Qt版本有两个(开始在网上的时候,tmake,但是后来从3.0之后qt 就自带了Make工具,就不需要tmake了):   qt-x11-opensource-src-4.5.3.

icegoly的专栏 7659

从在QT4中找不到QT3中的类 QT4与QT3的兼容

最近在研究QT,但是教程是 QT3版本的..而自己现在的QT是QT4版本了。后多原来qt3的类都不在了。但是想想又有点不对劲啊,哪有新版本全部否定老版本的啊,这不是砸自己的脚吗?后来又查了下,才发现qt4还是支持qt3的。QT4中提供了大量新控件,也保持了旧的控件,并命名为Qt3XXX,并且全都放到“/qt/include/Qt3Support”这个文件夹下面去了,哪些没有被修改的控件则继

斯人博客|PHP高级教程|C++|Javascript 2986

将QT4的程序迁移到QT5上

最近需要使用新版本的QT5,然而原本的版本是使用QT4的,因为QT4和QT5之间有着较大的改变,所以学习一下将QT4的程序迁移到QT5上。 下面贴上一些参考的链接: qt4项目迁移到qt5,遇到的问题及解决办法 qt4 代码迁移到qt5上方法 怎样将Qt4程序迁移到Qt5 下面添加一些在过程中遇到的问题,并且将之解决的链接,供后人参考: Linux的Qt编译出现???? error: cannot find -lGL问题的解决方法 Qt工程文件中QT -= core gui与Config-=qt的区别 QT

ice_masters的博客 2162

Linux下Qt4.5.3开发环境搭建

操作系统:Ubuntu12.04 搭建环境:Qt4.5.3开发环境--编译库文件和qmake工具 ①到http://download.qt.io/archive/qt/4.5/网站下载编译源文件,然后放到Ubuntu系统里进行解压: tar –xzvf qt-x11-opensource-src-4.5.3.tar.gz tar –xzvf qt-embedded-linux-openso

2621593260的专栏 2169

超详细讲解从零开始在开发板上跑通QT程序(基于全志T113)

但是我觉得直接把源码编译出来,然后得到编译得到qt的交叉编译工具。我用的SDK是百问网提供的t113 LTS SDK,这个SDK用来学习会比百问网提供的其他SDK要简单一些,但是对于跑QT程序,这个SDK可能没有其官网提供的其他的SDK 如:Tina那么的便利。我们需要先得到qt的源码,在qt源码目录下做一些相关配置,例如指定qt平台,指定qt编译所需要的交叉编译链,指定编译生成目录等等。当然,第一个目录指定的是qt源码目录下的arm-qt目录,这个目录是你编译文件生成最终结果的目录,你可以尝试改变它。

m0_61167558的博客 5891

搭建 Qt-x11 环境 和 4.5.3移植

 QT的安装办法有很多,百度一下有一大堆,但是大部分的手册都是复制粘贴的,并不能使用。      具体的安装办法:      1、去这里下载Qt 4.4.0 for X11 OpenSource版。      2、下载过来的是 qt-x11-opensource-src-4.4.0.tar.gz 文件,我们用tar命令解压一下。      tar zxvf qt-x11-opensou

yuwenliang的专栏 4080

Qt Creator 插件开发(1):编译 Qt Creator

当我们从 http://qt.nokia.com/downloads 下载 QtSDK 时,我们已经获得了最新版本的 Qt Creator 。如果你下载的是 Windows 平台 mingw 版本的 QtSDK,其中包含的 Qt Creator 是使用 MSVC 进行编译的,而 Qt Framework 和 Qt Designer 则使用的是 mingw(这也就是为什么有时候我们的插件能够在

autumn20080101的专栏 2461

QT 5.6转 QT 4.8问题总结

/root/Desktop/hero/MyTCPServer-build-desktop/../MyTCPServer/ui_tcpserverwindow.h:13: error: QtWidgets/QAction: No such file or directory 将QtWidgets换成QtGui /root/Desktop/hero/MyTCPServer-build-desktop/.

境界の彼方 4855

windows下QT环境的搭建:Qt(library)4.8.6+MinGW+Qtcreator3.2

c 要进行 Qt 开发,首先要安装 Qt library 和 Qt Creator , Qt library 为 Qt 程序提供头文件、静 态链接库和动态链接库, Qt  Creator 则是用于编程的 IDE ,提供了 GUI 界面绘制、代码编 写、程序调试等多个功能。   Qt 一直以

liuzijiang1123的专栏 5506

我在Linux开发板上跑的第一个Qt程序

摘要:学Linux不难,难的是没有找对教程,没有人快速的带你。开发板买了之后就放在那里吃灰,看视频也看不下去,看文档又看不懂,太难了!本文以通俗易懂的方式讲一下在正点原子Linux开发板上跑一个qt程序的基本步骤,争取让初学者能够在半天的时间跑通第一个程序。...

果果小师弟的博客 1万+

QT4.8.6/QT Creator Windows环境下安装与配置

准备工作: 1.QT4.8.6安装包 2.QT Creator安装包(这里选择4.3.1版本) 3.MinGW压缩包(找适用于QT4.8.6版本的版本)

Kellery 1万+

QT跨平台应用程序开发框架(1)—— 环境搭建

其实说是安装三个东西,其实只要安装一个Qt SDK,其它两个都有了。之后一路点击下一步即可,就是安装路径不要带中文,不要带特殊符号和空格。创建好项目后会预先生成一些代码,我们来讲解一下这些代码做了什么。Windows下还有哪些方案可以开发GUI?之后一路确认然后安装即可。

aaqq800520的博客 3881

Qt3升级到Qt5参考文档

比较Qt3与Qt5的各个类的变化情况,有需要升级Qt程序的同学可以作为参考

Visual C++与WPF混合开发:C++/CLI桥接技术实现现代化桌面应用

在桌面应用开发领域,混合编程技术是连接不同技术栈、复用核心资产的关键手段。其核心原理在于通过特定的桥接层,实现托管代码与非托管代码之间的互操作,从而打破语言和运行时环境的壁垒。这项技术的核心价值在于,它允许开发者将高性能、高稳定性的原生C++业务逻辑库,与现代化、高表现力的WPF用户界面无缝结合,避免了重写核心代码的巨大成本和风险。在工业控制、数据可视化、上位机软件等对性能和界面均有高要求的应用场景中,这种架构尤为适用。本文以C++/CLI作为桥接技术,详细演示了如何构建一个包含原生C++核心层、C++/C

weixin_33146151的博客 278

【Qt】Qt5.14.2配置OpenCV3.4.6环境

Qt5.14.2配置OpenCV3.4.6环境

不知道在干嘛每天 3748

某知名系统漏洞挖掘与利用思路探索

本文以安全研究为目的,分享对该套系统的代码审计和漏洞挖掘过程,文中所提到的漏洞均已提交给CNVD&CITIVD,请勿用做非法用途。

C20220511的博客 1904

[QT]VS2010+QT4.8.4开发环境搭建与测试

QT是什么 Qt ——一个跨平台应用程序和UI开发框架, 可以支持windows,Mac os,linux,embedded linux, wince/mobile,symbian; 它包括跨平台类库、集成开发工具和跨平台 IDE。使用 Qt 只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序 安装 QT4.8在windows上的配置不像

超越 5596

实战解析:如何利用MDFEND与Weibo21数据集构建多领域假新闻检测系统

本文实战解析了如何利用MDFEND模型与Weibo21数据集构建多领域假新闻检测系统。文章深入剖析了MDFEND的领域门控与专家混合机制,并提供了从数据预处理、模型理解到训练部署的完整指南,旨在解决通用模型在不同领域新闻检测中的性能衰减问题,提升检测的准确性与适应性。

vulkan6gpu的博客 580

java实现自动发送微信QQ消息(可发图片)

自动发送微信/QQ/微博等消息 一:功能:实现发送QQ/微信/微博消息,程序控制。 效果演示(实现自动发生QQ微信消息给女友,发微博信息也可以就不演示了) 二:原理讲解:将剪贴板的内容给发送到QQ微信中去,复制粘贴发送。 模拟真实操作进行发送信息。 三:前期准备,软件安装,及初步测试。...

XURUNFA950827的博客 1万+

关于QT4 暂时发现的QT4和QT3的区别

关于QT4 暂时发现的QT4和QT3的区别 为了即将到来的就业问题,目前正在努力学习QT。 我买了一本QT3的书《C++ GUI QT3编程》,感觉是相当不错的一本书,不过我的系统上装的是QT4,遇到了不少麻烦。一开始以为3和4没多大区别,但是按照书上的例子去实践的时候发现 居然变化如此之大,目前看了书上的前2章,发现基本上每个例子都需要修改才能在QT4里使用,下面总结一下暂时发现的Q

channel310的专栏 1158

esp8266步进电机驱动控制

blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器) Arduino uno的板子的程序 esp8266板子接入到Arduino uno的控制引脚上的5,6,7 esp8266程序 //****库***** #define BLINKER_WIFI //官方wifi协议库 #define BLINKER_PRINT Serial //串口协议库 #include <Blinker.h&gt

perseverance51博客 2854
上一篇: 使用ld
下一篇: [初]定制类的基本复制行为
飞羽飞之猪
博客等级 码龄21年 127粉丝 85原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值