【问题标题】:PerlQt - Can't use 'defined(@array)'PerlQt - 不能使用'已定义(@array)'
【发布时间】:2017-04-04 01:39:06
【问题描述】:

我正在尝试创建简单的 PerlQt 应用程序,但是当我启动我的 Perl 脚本时出现此错误:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /usr/local/lib/x86_64-linux-gnu/perl/5.22.1/QtCore4.pm line 1420.
Compilation failed in require at ./perlqt.pl line 5.
BEGIN failed--compilation aborted at ./perlqt.pl line 5.

代码:

#!/usr/bin/perl

use strict;
use warnings;
use QtCore4;
use QtGui4;
use Window;

sub main
{
    my $app = Qt::Application( \@ARGV );

    if (!Qt::SystemTrayIcon::isSystemTrayAvailable()) {
        Qt::MessageBox::critical(0, Qt::Object::this->tr('Systray'),
                              Qt::Object::this->tr('I couldn\'t detect any system tray ' .
                                          'on this system.'));
        return 1;
    }
    Qt::Application::setQuitOnLastWindowClosed(0);

    my $window = Window();
    $window->show();
    return $app->exec();
}

exit main();

请问如何解决?我的代码中没有使用任何数组。

【问题讨论】:

  • ...并从第 1420 行之后的下两行中删除 defined。这三行似乎是触发该特定错误的唯一位置。

标签: qt perl


【解决方案1】:

不能在 QtCore4.pm 第 1420 行使用 'defined(@array)'(也许你应该忽略 defined()?)。

QtCore4 做了一些没有意义的事情。目前,它“有效”——尽管很吵——但是

@{$classinfos} = () if !defined @{$classinfos};
@{$signals} = () if !defined @{$signals};
@{$slots} = () if !defined @{$slots};

应该改为

$classinfos ||= [];
$signals ||= [];
$slots ||= [];

QtCore4.pm.


Devel::Peek 模块未导出“SvREFCNT_inc”
在 QtGui4.pm 第 25 行出现导入错误后无法继续。

这似乎是 Devel::Peek 中的一个错误。它曾经导出SvREFCNT_inc,文档仍然声称它可以导出,但现在不再导出了。

你可以通过替换来解决这个问题

use Devel::Peek qw( SvREFCNT_inc );

use Devel::Peek qw( );
BEGIN { *SvREFCNT_inc = \&Devel::Peek::SvREFCNT_inc; }

QtGui4.pm:

(注意,Perl 代码永远不必使用SvREFCNT_inc,所以如果不是错误,它就使用 hack!)

【讨论】:

  • 它有帮助,但我得到另一个错误:imgur.com/a/M6kKz 为什么这个 Perl 模块有这么多错误?
  • 更新答案。
  • 另一个错误:imgur.com/a/qaVeI PerlQt 有什么问题?你帮助了我.. 但是有很多错误,我在想 PyQt 是不是更好..
  • 好像模块没有被积极维护,补充bug report
猜你喜欢
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2016-12-16
相关资源
最近更新 更多