找回密码
 立即注册
收起左侧

Qt系列书籍售后专用贴(问题、建议、勘误)

97
回复
64145
查看
[复制链接]
累计签到:1564 天
连续签到:1 天
来源: 2013-3-24 20:37:02 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
关于该系列书籍的介绍,请查看 Qt系列书籍专题如果需要下载源码、课件,请到下载页面。


书友注意


QQ书友群190740635(申请时请注明书友)


勘误:

一、《Qt Creator快速入门》  (第3版)第12章:

所有着色器代码前添加:
“# version 330 \n”


例如:
const char *vsrc =
            "#version 330                              \n"
            "void main() {                             \n"
            "   gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n"
            "}   


例12-6中修改:
// 创建顶点着色器
    QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this);
    const char *vsrc =
             "#version 330                             \n"
            "in vec4 vPosition;                        \n"
            "in vec2 vTexCoord;                        \n"
            "out vec2 texCoord;                        \n"
            "uniform mat4 matrix;                      \n"
            "void main() {                             \n"
            "   texCoord = vTexCoord;                  \n"
            "   gl_Position = matrix * vPosition;      \n"
            "}                                         \n";
    vshader->compileSourceCode(vsrc);
    // 创建片段着色器
    QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this);
    const char *fsrc =
             "#version 330                              \n"
            "uniform sampler2D tex;                     \n"
            "in vec2 texCoord;                          \n"
            "out vec4 fColor;                           \n"
            "void main() {                              \n"
            "   fColor = texture(tex, texCoord);        \n"
            "}                                          \n";
    fshader->compileSourceCode(fsrc);

二、《Qt Creator快速入门》  (第3版)421页:

②将“用户名”标签后的Line Edit的objectName属性改为userNameLineEdit,其text属性改为qtertest/qtftptest0placeholderText属性修改为“请输入用户名”,toolTip属性改为“默认用户名请使用:anonymous ,此时密码任意”;
        ③将“密码”标签后的Line Edit的objectName属性改为passWordLineEdit,其text属性改为pjD0lUUv6femyodL8a1wrJBcZYaoDG4techoMode属性选择为PasswordplaceholderText属性修改为“请输入密码”;



三、《QML和Qt Quick快速入门》创建Qt Quick Application项目没有qmake选项的解决办法

如果读者下载的Qt Creator的版本是10.x,那么在创建Qt Quick Application项目时会发现没有qmake选项。解决办法如下:
   

方法一:不再使用Qt Quick Application项目模板,而是选择其它项目中的Empty qmake Project,这样会创建一个qmke空项目,然后自己手动往里面添加各种文件。




方法二:下载使用老版本的Qt Creator,比如9.x。

1、下载地址:https://download.qt.io/official_releases/qtcreator/9.0/9.0.2/

2、配置Qt开发套件





以后使用时不要选择错了:




以下为早期内容:

最新Qt 4.8版本安装:流程

  • 因为书中版面限制,所以代码注释不是很多。不过源码中有详细的注释,请大家下载源码进行参考学习!
  • 下载Qt Creator 2.5.0及以后版本的童鞋,需要手动下载MinGW,请点击这里(包含使用教程):下载
  • 如果在代码中使用tr()函数设置界面上显示中文出现乱码,请在主函数中使用:QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));



对于是否需要使用Qt 5的建议:


因为Qt 5已经推出了,所以初学者又开始出现了那个选择开发工具的困扰。
到底是使用Qt 4呢,还是Qt 5呢?毕竟Qt 5是新的,我又是刚开始学,还是学习最新的技术吧!

       很多初学者都有这样的思想。其实,Qt 5是从Qt 4发展而来的,这就像学习C++ 到底是否需要学习C一样,虽然完全可以直接学习前者,不过那样基础毕竟不牢靠,别人说的很多东西你可能也不知道在什么地方出现的。而且Qt 5现在还没有很好的文章教程,网上全是Qt 4的内容,初学者想自学,那问题可以说是滔滔不绝啊!这里想告诉大家,如果是初学者,真没必要用Qt 5来学习Qt 4的内容,虽然官方一直说Qt 4程序可以很容易移植到Qt 5,但实际上会出现很多小问题。对于初学者而言,快速学习知识才是最重要的,而不是浪费时间来搞环境。因为大家对很多东西还不是很了解,Qt 4已经够庞杂了,如果再和Qt 5掺和一起,我想,大家又会迷茫了,不知Qt如何学起了。

      很多公司现在还在用Qt 2,Qt 3呢,所以说不是最新的就是最好的。还是那句话,适合的东西才是最好的。这里不是说Qt 5不好,只是,毕竟它跟Qt 4的框架都不同了,如果我们用不到它的新功能,而只是为了学习Qt编程,那么现在没必要用它。等我们掌握好Qt 4以后,了解了它的框架,然后再去学习Qt 5,这样只需要花费很少的时间来查看两者的区别即可,大体程序还是一样的。

       如果是学习《Qt Creator快速入门》,还是建议下载书中使用的Qt和Qt Creator版本来学习,这样可以很快完成学习任务,尽量避免出错。等自己已经有了一定的知识积累之后,并且是需要使用高级版本的Qt的功能的时候,再去使用新版本的Qt。





对于本书的任何疑问、建议、书中勘误,请进行回帖!












回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-9-18 19:43:02 显示全部楼层
qt5.9.1 开发环境下,第三版P295页,编译后提示
QOpenGLShader::compile(Vertex): ERROR: 0:1: 'in' : storage qualifier supported in GLSL ES 3.00 only  

*** Problematic Vertex shader source code ***
#line 1
in vec4 vPosition;                        
void main() {                             
   gl_Position = vPosition;               
}                                         

***
QOpenGLShaderProgram::attributeLocation(vPosition): shader program is not linked
QOpenGLShaderProgram::attributeLocation(vPosition): shader program is not linked
QOpenGLShaderProgram::attributeLocation(vPosition): shader program is not linked
不知为什么,以及怎么办
回复 支持 1 反对 0

使用道具 举报

累计签到:2088 天
连续签到:7 天
2017-3-2 20:03:37 显示全部楼层
《Qt Creator快速入门》第三版,书中16-1,16-2,16-3示例代码包含头文件时,右括号用错,第357页第二段代码,有一处等于符号写错。
参与人数 1人气 +2 收起 理由
yafeilinux + 2 对我帮助很大!

查看全部评分总评分 : 人气 +2

回复 支持 1 反对 0

使用道具 举报

累计签到:1 天
连续签到:1 天
2013-5-21 15:15:41 显示全部楼层
《Qt Creator快速入门》勘误:
P35页:从下数第13和17行代码参数有误(QWidget *widget=new QWidget(0,Qt::Dialog);),根据书中所列代码得不到后文的运行结果。
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2013-5-21 18:37:52 显示全部楼层
kgp0213 发表于 2013-5-21 15:15
《Qt Creator快速入门》勘误:
P35页:从下数第13和17行代码参数有误(QWidget *widget=new QWidget(0,Qt:: ...

P35是指第35页吗,这里没有对应的代码啊?请指明是哪个源码?谢谢!

点评

没错就是39页, 从下往上数 13行参数应该为 (0,0,0) 17行................(0,0)  发表于 2013-9-27 11:08
回复 支持 反对

使用道具 举报

尚未签到

2013-5-22 20:41:31 显示全部楼层
《Qt Creator快速入门》建议

P24页代码段里第11行

在我的电脑上直接使用tr出现的是乱码,然后,建议使用  trUtf8  ~

PS:我的电脑是win7旗舰版64位的,Qt版本4.7.2,Qtcreator 版本2.7.0
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2013-5-22 20:45:49 显示全部楼层
姚江 发表于 2013-5-22 20:41
《Qt Creator快速入门》建议

P24页代码段里第11行

嗯。如果出现乱码,那么就用:QTextCodec::setCodecForTr(QTextCodec::codecForName(“UTF-8″));
回复 支持 反对

使用道具 举报

累计签到:34 天
连续签到:1 天
2013-6-20 11:31:34 显示全部楼层
您好,我看的是您的《Qt quick》那本书
其中有一个关于信号交互QML + C++的例子貌似用不了了
// MyItem.qml
import QtQuick 1.0

Item {
     width: 100; height: 100

     MouseArea {
         anchors.fill: parent
         onClicked: {
             myObject.cppMethod("Hello from QML")
             myObject.cppSlot(12345)
         }
     }
}

class MyClass : public QObject
{
     Q_OBJECT
public:
     Q_INVOKABLE void cppMethod(const QString &msg) {
         qDebug() << "Called the C++ method with" << msg;
     }

public slots:
     void cppSlot(int number) {
         qDebug() << "Called the C++ slot with" << number;
     }
};

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

     QDeclarativeView view;
     MyClass myClass;
     view.rootContext()->setContextProperty("myObject", &myClass);

     view.setSource(QUrl::fromLocalFile("MyItem.qml"));
     view.show();

     return app.exec();
}

这个例子测试无法通过 P248页

我在反复修改之后出现了我在这里提到的问题【http://www.qter.org/forum.php?mod=viewthread&tid=295&extra=page%3D1

希望您来解答

回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2013-8-9 16:50:21 显示全部楼层
wuming123057 发表于 2013-8-9 16:48
《Qt Quick开发实战精解》建议
1 希望能基于Quick 2重新写
2 希望能加入使用QML开发桌面程序这一块(现在Qt ...

嗯。等后面再版的时候会考虑的。谢谢你的建议。
回复 支持 反对

使用道具 举报

累计签到:18 天
连续签到:1 天
2013-8-30 22:01:19 显示全部楼层
请问《Qt Creator快速入门》里例子3-4为何运行不出结果呢?就是点击运行后不显示任何窗口,我把下载的原代码运行了一下,也是不显示
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2013-9-2 14:04:02 显示全部楼层
tm7998 发表于 2013-8-30 22:01
请问《Qt Creator快速入门》里例子3-4为何运行不出结果呢?就是点击运行后不显示任何窗口,我把下载的原代 ...

请说一下你的环境,我这里测试没有问题的。
回复 支持 反对

使用道具 举报

累计签到:18 天
连续签到:1 天
2013-9-5 06:27:15 显示全部楼层
嗯,是环境问题,已经解决了,谢谢啊
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2013-9-27 11:07:40 显示全部楼层
xflcx1991 发表于 2013-6-8 16:42
我想他指的是第39页QWidget和QLabel新建对象的两条语句。改为只用一个参数0的构造函数即可。 ...

没错就是39页,
从下往上数
13行参数应该为 (0,0,0)
17行................(0,0)
回复 支持 反对

使用道具 举报

累计签到:56 天
连续签到:1 天
2013-11-12 20:00:54 显示全部楼层
13楼说的对,这是个小错误
回复 支持 反对

使用道具 举报

累计签到:56 天
连续签到:1 天
2013-11-14 08:25:51 显示全部楼层
本帖最后由 xinkexue 于 2013-11-14 08:33 编辑

Qt Creator快速入门里46页,我自己添加代码结果报错,代码就是书上写的第一段

加上MyWidget::~MyWidget(){    delete ui;}就可以了,但是书里没写
回复 支持 反对

使用道具 举报

累计签到:12 天
连续签到:1 天
2013-12-27 23:24:49 显示全部楼层
本帖最后由 colin4124 于 2013-12-28 22:20 编辑

第 39 页,
  1. QLabel *label = new QLabel(0, Qt::SplashScreen);
复制代码
应该为
  1. QLabel *label = new QLabel(0, Qt::Dialog);  
复制代码
否则看不到图 3-2 的效果。另外,源码 3-1\myWidget 的代码中 23行的
  1. label2->show();
复制代码
应该为
  1. widget->show();
复制代码
麻烦作者确认下,给个答复。

点评

请看下17楼的回复。  发表于 2014-1-9 22:09
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2014-1-9 22:06:58 显示全部楼层
kgp0213 发表于 2013-9-27 11:07
没错就是39页,
从下往上数
13行参数应该为 (0,0,0)

这个在二版中已经更改:


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    // 在代码中可以使用中文字符串
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

    // 新建QWidget类对象,默认parent参数是0,所以它是个窗口
    QWidget *widget = new QWidget();
    // 设置窗口标题
    widget->setWindowTitle(QObject::tr("我是widget"));
    // 新建QLabel对象,默认parent参数是0,所以它是个窗口
    QLabel *label = new QLabel();
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2014-1-9 22:09:05 显示全部楼层
xinkexue 发表于 2013-11-14 08:25
Qt Creator快速入门里46页,我自己添加代码结果报错,代码就是书上写的第一段

加上MyWidget::~MyWidget(){ ...

嗯,如果按照书上来做,第一步是新建Qt Gui应用,这么生成的默认代码上就有MyWidget::~MyWidget(){    delete ui;}的,所以书上没有写出来。
回复 支持 反对

使用道具 举报

累计签到:5 天
连续签到:1 天
2014-1-23 20:00:29 显示全部楼层
《Qt Creator快速入门》P38页,图3-1,从QFrame直接派生的QSokutter应该为QSplitter吧,我用的是qt5.1,不知道qt4中有没有QSokutter这个类?
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2014-1-26 12:53:53 显示全部楼层
zhuce0001 发表于 2014-1-23 20:00
《Qt Creator快速入门》P38页,图3-1,从QFrame直接派生的QSokutter应该为QSplitter吧,我用的是qt5.1,不 ...

嗯,是的,这是笔误!感谢指出该错误!
回复 支持 反对

使用道具 举报

累计签到:5 天
连续签到:1 天
2014-2-18 20:47:51 显示全部楼层
《Qt Creator快速入门》P81页,图5-1,QWidget类下少一个表示继承关系的箭头
回复 支持 反对

使用道具 举报

累计签到:1564 天
连续签到:1 天
2014-2-18 21:07:57 显示全部楼层
zhuce0001 发表于 2014-2-18 20:47
《Qt Creator快速入门》P81页,图5-1,QWidget类下少一个表示继承关系的箭头

嗯,感谢支持!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了