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 

#include 

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

#include 

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 

  1. #include 

打印机不工作

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

    #include 
    #include 

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

    Qt += printsupport

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

    #include 
    #include  

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 

#include 

QDrag问题

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

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

在Qt5中将产生错误

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

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

#include 

qFindChildren已被弃用

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

error :  'qFindChildren' was not declared in  this scope

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

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

替换

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

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

qVariantValue已被弃用

编译器会出现

error :  'qVariantValue' was not declared in  this scope

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

QTime t  = qVariantValue <QTime>(val);

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

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

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

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

qVariantCanConvert已被弃用

替换

    Q_ASSERT (qVariantCanConvert <QString>(variant));
    Q_ASSERT (qVariantCanConvert <QSize>(variant));
    Q_ASSERT (qVariantCanConvert <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 <MetaData*>(decodedPointer);
    QWeakPointer <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 

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

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配置选项。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享题目:PyQt5程序-创新互联
分享URL:http://myzitong.com/article/dchiii.html