PyQt5程序

最近,看了看PyQt5,相关的资料确实很少,PyQt4到PyQt5的变动还是很大。写了个带前进后退功能的小浏览器,一直都是写命令行的程序,确实很少写带界面的程序,只是为了创新、突破,开个头

下面是网上找的前面说的变动:

QtWidgets作为一个独立的模块

例如编译时错误

    error: QMainWindow: No such file or directory
    error :  QToolButton : No such file or directory
    error :  QWidget: No such file or directory

解决办法:

在*.pro文件里添加:

QT += widgets

更改

#include <QtGui>

#include <QtWidgets>

    程序现在应该就可以运行了,但是有时可能需要更加明确的包含

    #include <QtWidgets/QToolButton>

      QtWebKitWidgets也是一个独立的模块:

      例如编译时错误

      error: invalid use of incomplete type ‘class QWebFrame‘
      error     : forward declaration of      ‘class QWebFrame‘

        解决办法:

        在*.pro文件里添加:

        1. QT += webkitwidgets

        注意:当有QT += webkitwidgets的时候,就不再需要QT += widgets

        此外,更改

        1. #inclue <QtWebKit>

        1. #include <QtWebKitWidgets>

        打印机不工作

        如果你的代码有以下几行:

            #include <QPrinter>
            #include <QPrintDialog>

        将以下内容添加到项目文件中:

            Qt += printsupport

        同样,有时可能仍无法正常工作,需要指定:

            #include <QtPrintSupport/ QPrinter >
            #include  <QtPrintSupport/ QPrintDialog>

        toAscii()和fromAscii()已被弃用

        替换

        fromAscii()
        toAscii()

        fromLatin1()
        toLatin1()

        例如,给定的Qt4代码

        QByteArry configfileti  =  TMP_Config. toAscii() ;

        变为

        QByteArry configfileti  =  TMP_Config. toLatin1() ;

        QCoreApplication::UnicodeUTF8已被弃用

        此枚举类型用于定义8位编码的字符串参数translate()。此枚举现在已经过时,所有的情况将使用UTF-8。所以删除了QCoreApplication::UnicodeUTF8的所有实例。例如:

            Href_Gui -> setWindowTitle ( QApplication :: translate ( "Href_Gui" ,  "Url / www" ,  0 ,  QApplication :: UnicodeUTF8 ) ) ;
            label -> setText ( QApplication :: translate ( "Href_Gui" ,  "Text:" ,  0 ,  QApplication :: UnicodeUTF8 ) ) ;
            label_2 -> setText ( QApplication :: translate ( "Href_Gui" ,  "Url:" ,  0 ,  QApplication :: UnicodeUTF8 ) ) ;
            label_3 -> setText ( QApplication :: translate ( "Href_Gui" ,  "Target / Name:" ,  0 ,  QApplication :: UnicodeUTF8 ) ) ;

        变为

            Href_Gui -> setWindowTitle ( QApplication :: translate ( "Href_Gui" ,   "Url / www" ,   0 ) ) ;
            label -> setText ( QApplication :: translate ( "Href_Gui" ,   "Text:" ,   0 ) ) ;
            label_2 -> setText ( QApplication :: translate ( "Href_Gui" ,   "Url:" ,   0 ) ) ;
            label_3 -> setText ( QApplication :: translate ( "Href_Gui" ,   "Target / Name:" ,   0 ) ) ;

        QWorkspace已被弃用

        这个类已经过时,在Qt4.3中被替换为QMdiArea。在Qt5中QWorkspace已被删除。新的类与QWorkspace有类似的API,移植只涉及改变几个方法、信号和槽的名字。

        更换

        #include <QWorkspace>

        #include <QMdiAre>

        QDrag问题

        拖动功能的应用程序将需要一些调整。如:

        QDrag *drag = new QDrag(event->widget());

        在Qt5中将产生错误

        error : no matching function for call to  ‘QDrag::QDrag(QWidget*)‘

        要解决这个附加组件,其中包括:

        #include <QWidget>

        qFindChildren已被弃用

        这种方式会弹出一个错误:

        error :  ‘qFindChildren‘ was not declared in  this scope

        为了解决这个问题,将qFindChildren替换为findChildren,例如

            toString ( const  QObject * obj ,  int indentLevel )  const  {
            [... ]
                
                 if  (m_children )  {
                     QList <</span>QObject*> childlist = qFindChildren<</span>QObject*>(obj, QString());
            [... ]

        替换

        QList <</span>QObject*> childlist = qFindChildren<</span>QObject*>(obj, QString());

        QList <</span>QObject*> childlist = obj->findChildren<</span>QObject*>(QString());

        qVariantValue已被弃用

        编译器会出现

        error :  ‘qVariantValue‘ was not declared in  this scope

        此功能相当于的QVariant::value(value)。因此,如果指定QVariant val应改写

        QTime t  = qVariantValue <</span>QTime>(val);

        QTime t  = val. value <</span>QTime>();

        QTime用尖括号括起来,则告知编译器QVariant将返回。但是,如果变量不是一个QVariable,则类型用尖括号括起来就不应该被使用(这样做将导致一个模糊的编译时错误)。所以指定的m_color(QColor类型),应改写

        s. setValue ( "color/favorite" , qVariantValue <</span>QColor>(m_color));

        s. setValue ( "color/favorite" , m_color. value ( ) ) ;

        qVariantCanConvert已被弃用

        替换

            Q_ASSERT (qVariantCanConvert <</span>QString>(variant));
            Q_ASSERT (qVariantCanConvert <</span>QSize>(variant));
            Q_ASSERT (qVariantCanConvert <</span>QFont>(fontVariant));

            Q_ASSERT (variant. canConvert ( QMetaType :: QString ) ) ;
            Q_ASSERT (variant. canConvert ( QMetaType :: QSize ) ) ;
            Q_ASSERT (fontVariant. canConvert ( QMetaType :: QFont ) ) ;

        Qt::escape已被弃用

        1. error :  ‘escape‘ is not a member of  ‘Qt‘

        所以应该更改下面代码:

                 if  (result  ==  QString ( ) )
                    result  =  Qt :: escape (val. toString ( ) ) ;
                 else
                    result  =  Qt :: escape (result ) ;
                 return result ;

                 if  (result  ==  QString ( ) )
                    result  =  QString (val. toString ( ) ). toHtmlEscaped ( ) ;
                 else
                    result  =  QString (result ). toHtmlEscaped ( ) ;
                 return result ;

        QDesktopServices::storageLocation已被弃用

            error :  ‘storageLocation‘ is not a member of  ‘QDesktopServices‘
            error :  ‘DataLocation‘ is not a member of  ‘QDesktopServices‘

        使用QStandardPaths::StandardLocation,替换

        QString path  = s. value ( "db.path" , QDesktopServices :: storageLocation ( QDesktopServices 
        :: DataLocation ) ). toString ( ) ;

        QString path  = s. value ( "db.path" ,QStandardPaths :: standardLocations (QStandardPaths ::
         DataLocation ) ). toString ( ) ;

        QtMutimedia替换了Phonon

        音频、视频已不再使用
         phonon,
         如果你还在研究phonon,那么你已经out了!好好研究一下
         QMediaPlayer、QMediaMetaData ...吧!

        CONFIG += qtestlib已被弃用

        如果在项目文件中使用,则编译器会发出警告,尽管如此代码将照常运行:

        Project WARNING : CONFIG +=qtestlib is deprecated.  Use  QT +=testlib instead.

        QWeakPointer怪异

        如下代码

            quint64 decodedPointer  = line. toULongLong ( ) ;
            MetaData  *md  =  reinterpret_cast <</span>MetaData*>(decodedPointer);
            QWeakPointer <</span>MetaData> wp(md);

        结果

        error : no matching function  for call to  ‘QWeakPointer::QWeakPointer(MetaData*&)‘

        为了解决这个问题,将下面代码添加到项目文件:

        DEFINES  += QT_DISABLE_DEPRECATED_BEFORE = 0

        QtConcurrent库的失踪了?

        C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include\QtConcurrent\qtconcurrentthreadengine.h:133: error:
         undefined reference to `_imp___ZN12QtConcurrent16ThreadEngineBaseD2Ev‘

        在Qt4中,QtConcurrent是QtCore的一部分,所以,没有必要包括特定的头。这已不再是用Qt5的情况下。如果源代码如下

        m_current  = QtConcurrent :: blockingMappedReduced (slices , functor , stitchReduce ,
        QtConcurrent :: UnorderedReduce  ) ;

        则将需要包含头:

         #include <QtConcurrent/ QtConcurrent >

        到项目文件,并添加下面一行:

        LIBS  +=  - lQt5Concurrent

        固定的#include <>头

        在qtbase/bin/中存在一个“fixqt4headers.pl”这样的Perl脚本。运行于Qt源代码运行,为Qt组件纠正#include <>指令还要考虑模块名称。

        插件加载

        Q_EXPORT_PLUGIN,Q_EXPORT_PLUGIN2宏已经过时,新的宏为Q_PLUGIN_METADATA。新系统的优点是,它允许Qt 来查询元数据的插件没有实际dlopen‘ing它。这极大地提高了插件系统的性能和可靠性。

        新Q_PLUGIN_METADATA宏包含QObject的派生类中加载插件时返回的Q_OBJECT宏。它包含插件IID并指向一个包含插件元数据的json文件。json文件被编译成插件,并不需要安装。

        例如如何改变插件可以通过查找补丁,改变GIF图像格式的插件,请查看:http://qt.gitorious.org/qt/qtbase/commit/963b4c1647299fd023ddbe7c4a25ac404e303c5d .

        部署的系统没有使用C++11

        当Qt的系统上安装了C++11,建立从源代码的Qt库/框架链接,系统的C++ 11库(libc++)。这意味着Qt库/框架没有部署到没有安装C++11(如out-of-the-box Mac OS X 10.6)的系统。为了能够部署到系统仅支持较旧的C++标准(libstdc++),构建Qt源代码没有C++11配置选项。

        时间: 2024-10-10 02:28:49

        PyQt5程序的相关文章

        pyqt5程序使用py2exe打包后运行时报找不到Qt platform plugin ‘windows’错误

        pyqt5程序使用py2exe打包后运行时报找不到Qt platform plugin 'windows'错误 现象描述: 64位windows系统下直接将pyqt5的plugins下的platforms文件夹复制到exe相同目录即可,但在32位系统下一直报找不到Qt platform plugin 'windows'错误. 解决方案: 在exe同目录下新建plugins文件夹,然后将platfroms文件夹移到新建的文件夹下,同时修改main方法,添加以下代码: QApplication.ad

        PyQt5程序基本结构分析

        面向过程版 # 0. 导入需要的包和模块 from PyQt5.Qt import * # 包含了我们常用的QT中的一些类 import sys # 一个内置的模块,系统相关操作 # 代码执行的时候,可以接收命令行的参数 sys.argv # args = sys.argv # python命令运行时的参数,一般第0个是文件名,后面是其他参数 # print(args) # 1. 创建一个应用程序对象, # 一个PyQt程序都需要一个应用程序对象 # * 它包含主事件循环,在其中来自窗口系统和其

        PyQt5系列教程(三)用py2exe进行程序打包

        软硬件环境 Windows 10 Python 3.4.2 PyQt5 Py2exe 前言 在我们开发了完整的PyQt5项目后,一般都会将其打包成exe文件,方便其他人使用.今天我们就用Py2exe这个工具来打包上一堂课中完成的工程,工程源码在http://download.csdn.net/detail/djstavav/9351205. Py2exe py2exe是python的一个打包成exe的工具,官方提供的可执行文件还不支持python3.google一下,发现已经有好心人重编了源码来

        熟悉PyQt5 与 Eric6 的 GUI 开发

        用 Eric6 与 PyQt5 结合,非常方便的实现界面与逻辑分离,满足python的极速GUI编程,你只需要关注程序的逻辑实现,而不需要在界面上花很多时间. 可以说这是一对GUI开发完美的组合! 为了方便使用在正式开始之前我们先简单配置一下Eric6的项目工作区 配置Eric6 打开Eric6 选择菜单栏 设置-首选项 在左侧列表中选择项目-多重项目,点击右侧图标后选定硬盘中的一个位置,我这里是F:\Python\PyQt5文件夹.选好后点击右下方的OK按钮. 简单配置后,让我们正式开始体验极

        1. PyQt5 安装测试程序

        第一个 PyQt5 程序 import sys from PyQt5 import QtWidgets, QtCore app = QtWidgets.QApplication(sys.argv) widget = QtWidgets.QWidget() widget.resize(360, 360) widget.setWindowTitle("Hello, Leo") widget.show() sys.exit(app.exec_()) 原文地址:https://www.cnbl

        Python-GUI编程-PyQt5

        课程介绍:Python-GUI编程-PyQt5编写出你开心就好的界面!实属Python各种工具开发必备! 课程目录:├─001第一章:Python-GUI编程-简介│      001-Python-GUI编程-简介│      002-Python-GUI编程-GUI库的简介│      003-Python-GUI编程-PyQt的简介│      004-Python-GUI编程-PyQt的优势│      ├─002第二章:Python-GUI编程-PyQt的环境安装│      005-

        使用PyQt5编写一个简单的GUI程序

        我做Python窗口界面编程时,经常使用PyQt进行设计.这里简单叙述一下使用PyQt5制作一个简单的图形界面的流程 PyQt的简介以及开发环境的搭建在此不多赘述. 1.       打开Qt Designer,新建一个Dialog Without Buttons 2.       从左侧的Widget Box拖入一个Label,一个Text和一个Button 3.       双击控件可以改变其上的文本 4.       保存文件,命名为test.ui 5.       使用pyuic5将.u

        pyqt5猜数小程序

        #-*- coding:utf-8 -*- from PyQt5.QtWidgets import QApplication,QWidget,QTableWidgetItem import sys from form import Ui_Form import random import time class mywindow(QWidget,Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.btns

        PyQt5(2)——调整布局(布局管理器)第一个程序

        我们拖拽一个UI文件,转为PY文件后生成一个类Ui_MainWindow 此时,我们新建一个文件,用来控制业务逻辑(继承界面中的类),跟界面分开,这样我们就完成了界面和逻辑相分离(这段代码使用率基本100%,牢牢记住). 1 __author__ = "WSX" 2 import sys 3 from PyQt5.QtWidgets import QApplication, QMainWindow 4 from first import * #导入了Ui_MainWindow类 5 6