Qt学习笔记

这篇博客详细记录了Qt编程中遇到的各种问题及解决方法,包括样式表的继承作用域限制、UI文件更新、隐藏标题栏、QtNetwork模块找不到、LineEdit显示与输入、时间显示、数据库操作、socket通信、Qt界面间数据传递、数据库与表格显示、文件操作、XML处理、字体大小调整等。此外,还介绍了如何处理Qt线程、SQLite自增字段设置、图形界面配置内核错误等问题。
摘要由CSDN通过智能技术生成
2012.03.05 (4个)
问题1:样式表的继承作用域,因为子窗体自动继承父窗体的样式表,所以当需要限制父窗体的样式表作用域时,
解决方式:在change stylesheet中添加如下代码:
#login {
background-image: url(:/file/image/back.png);
}

#login * {
backpround-image:url();
}
注:login是父窗体的窗体,可以根据实际进行修改

问题二:更新ui文件
解决方式:
当修改了原工程文件中的UI文件后,但是运行后没有显示,可以使用uic命令更新UI文件,具体命令操作如下:
uic *.ui -o ui_*.h
uic命令在Qt Creator安装目录的qt/bin目录下。
其中*指代具体的文件名
如果此时还不行的话,再尝试关闭Qt Creator然后在打开。
注:在设置基类的时候尽量选择Widget
问题三:隐藏标题栏
解决方式:
去掉界面最上面的带有最大化、最小化、关闭标志的标题栏方法。在*.cpp的构造函数中添加:
setWindowFlags(Qt::FramelessWindowHint);
然后重新编译即可。
问题四:找不到QtNetwork文件(或QSql*文件、xml文件等模块文件)
解决方式:
本来存在的文件如QtNetwork等需要增加的模块但是找不到的话,只需要在工程文件中添加   QT  += network(可以换成其他模块的文件)

2012-03-09(2个)
 问题一:LineEdit中追加显示输入数据
 解决方式:
 方式一:声明一个QString s对象,然后让s指代LineEdit中的文本,档输入的时候使用+=运算符。假如输入1,表现形式为:s += '1';
 然后让LineEdit中显示s即可.
 方式二:使用如下代码QString s;
 lineEdit->setText(s.append(添加内容));
 问题二:在Label中动态显示时钟
 解决方式:
 增添一个定时器类,设置定时时间为1秒。档定时时间到时后,设置定时时间为1000毫秒(即1秒),然后使timeout信号连接槽函数,在槽函数中设置显示系统当前时间。
 
 2012-03-12(2个)
 问题一:LineEdit中不显示输入的最后一个字符,即回显
 解决方式:使用如下代码
 s = LineEdit->text();
 ui->LineEdit->setText(s.(left(s.size() - 1)));
 问题二:无法正常显示中文
 解决方式:
 尝试在main函数中添加如下代码:
     QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf_8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
    其中,codecForName中可供选项有:utf-8、gb2312、gb18030、gtk;以前两种为主。(仅限于正常显示中文,不限其他语言)
    注:要添加头文件#include <QTextCodec>
    使用该种方式可以使程序支持中文,不会出现中文乱码问题
 2012-03-13
 问题一:输出QString的内容
 解决方式:使用qDebug() << QString即可在Application OUT窗口输出QString的内容
 问题二:当某个界面操作时间超过一定时间后,自动返回主机面
 解决方式:
 在构造函数中启动一个定时器,连接timeout()信号,在槽函数中设置发送返回主界面的信号,在manager中进行连接即可。
 
 2012-03-14
 问题一:界面参数传递
 解决方式:
 方式一:在需要发送数据的界面中定义一个信号,该信号含有QString参数,然后在接收界面中定义的槽中也添加参数,使用connect连接这个信号和槽,这样参数就可以从发送方传递到接收方了。
 方式二:在头文件中定义一个被调用类的对象,然后在需要调用的位置使用类名.成员名(成员名必须存在)
 问题二:编译时产生警告:“control reaches end of non-void function”
 解决方式:
 是Main函数中没的返回值导致的,在所指示的函数最后加一句return 0或(return (int)value)即可。
 
 2012-03-16
 问题一:将从数据库中找到的符合条件的记录放入TableView中。并且设置为可读信息
 解决方式:
    使用QSqlTableModel中的成员函数setFileter(const string fileter),将查询条件即sql语句中where后面的部分当作const string filter即可.
    设置可读使用成员函数setEditTriggers(QAbstractItemView::NoEditTriggers);
    以上两个成员函数都要在select()之前使用。
问题二:在Qt中实现播放视频

解决方式:
使用Qt中的phonon库,实现播放视频。最简单的步骤如下:
安装phonon-backend-gstreamer和phonon-devel,然后在工程文件.pro中添加 “QT  += phonon”。再需要实现播放功能的函数中添加:
    Phonon::VideoPlayer *player = new Phonon::VideoPlayer(Phonon::VideoCategory, widget);//widget可以替换为其他需要显示视频的部件
    player->load(Phonon::MediaSource("/root/test1.flv"));
     player->play();
如果出现如下警告信息:WARNING: Phonon needs QCoreApplication::applicationName to be set to export audio output names through the DBUS interface
则说明没有给application命名,只要在QApplication a(argc,argv)下加入a.setApplicationName("Name");即可。(仅限于在main函数中显示视频时使用。)
注:因为在安装QT的时候默认设置是不安装phonon,所以在开始编译的时候会提示找不到phonon库,(或提示没有phonon这个头文件)。此时只需要重新装上phonon库即可。方法如下:
在终端中输入:apt-get install libphonon-dev,或是在新力得软件中心安装gstreamer等动态库即可。
    
 2012-03-19
问题一:在一个界面中调用另一个界面中的内容//出现段错误,尚未解决
解决方式:
    基于C++的原理,在调用界面中声明一个包含被调用部件的类,然后使用类名.调用部件或者是类名->调用部件(指针和非指针的
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值