hi all, i'm getting this runtime error. at every line with a 'SLOT()' in this code. i don't really know what is going wrong. i have tried to translate the webcapture code on qt labs graphics dojo: http://qt.gitorious.org/qt-labs/graphics-dojo/trees/master/webcapture
following is the entire code. when i remove the QObject connect, it works but breaks on other 'SLOT()' in the code. thanks a lot in advance. ############################################################################# ## ## Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ## Contact: Qt Software Information ([email protected]) ## ## This file is part of the Graphics Dojo project on Qt Labs. ## ## This file may be used under the terms of the GNU General Public ## License version 2.0 or 3.0 as published by the Free Software Foundation ## and appearing in the file LICENSE.GPL included in the packaging of ## this file. Please review the following information to ensure GNU ## General Public Licensing requirements will be met: ## http://www.fsf.org/licensing/licenses/info/GPLv2.html and ## http://www.gnu.org/copyleft/gpl.html. ## ## If you are unsure which license is appropriate for your use, please ## contact the sales department at [email protected]. ## ## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ## ############################################################################# import sys from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtWebKit import * qtversion = QT_VERSION_STR.split('.') not_yet_qt_4_5 = len(qtversion) == 3 and qtversion < (4, 5, 0) class WebCapture(QObject): def __init__(self): self.m_zoom = 100 self.m_percent = 0 self.m_page = QWebPage() self.connect(self.m_page, SIGNAL('loadFinished(bool)'), self.save_result) self.connect(self.m_page, SIGNAL('loadProgress(int)'), self.show_progress) def load(self, url, zoom, output, width): print 'Loading', url.toString() self.m_zoom = zoom self.m_filename = output self.m_page.mainFrame().load(url) self.m_page.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) self.m_page.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) factor = self.m_zoom / 100.0 if not_yet_qt_4_5: self.m_page.setViewportSize(QSize(width, 3 * width / 4) / factor) else: self.m_page.mainFrame().setZoomFactor(factor) self.m_page.setViewportSize(QSize(width, 3 * width / 4)) def show_progress(self, percent): if self.m_percent >= percent: return while self.m_percent < percent: self.m_percent += 1 sys.stdout.write('#') sys.stdout.flush() def save_result(self, ok): print # crude error-checking if not ok: sys.stderr.write('Failed loading %s' % self.m_page.mainFrame().url().toString()) self.emit(SIGNAL('done')) return # create the image for the buffer size = self.m_page.mainFrame().contentsSize() image = QImage(size, QImage.Format_ARGB32_Premultiplied) image.fill(Qt.transparent) # render the web page p = QPainter(image) p.setRenderHint(QPainter.Antialiasing, True) p.setRenderHint(QPainter.TextAntialiasing, True) p.setRenderHint(QPainter.SmoothPixmapTransform, True) self.m_page.setViewportSize(self.m_page.mainFrame().contentsSize()) self.m_page.mainFrame().render(p) p.end() if not_yet_qt_4_5: # scale, since we don't have full page zoom factor = self.m_zoom / 100.0 image = image.scaled(size * factor, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) image.save(self.m_filename) self.emit(SIGNAL('done')) def guess_url_from_string(s): urlstr = s.trimmed() test = QRegExp('^[a-zA-Z]+\\:.*') # check if it looks like a qualified URL. try parsing it and see. has_schema = test.exactMatch(urlstr) if has_schema: url = QUrl(urlstr, QUrl.TolerantMode) if url.isValid(): return url # might be a file. if QFile.exists(urlstr): return QUrl.fromLocalFile(urlstr) # might be a shortcut - try to detect schema. if not has_schema: dot_index = urlstr.indexOf('.') if dot_index != -1: prefix = urlstr.left(dot_index).toLower() schema = prefix if prefix == QString('ftp') else QString('http') url = QUrl(schema + QString('://') + urlstr, QUrl.TolerantMode) if url.isValid(): return url # fall back to QUrl's own tolerance parser. return QUrl(s, QUrl.TolerantMode) if __name__ == '__main__': argc = len(sys.argv) if argc < 4 or argc > 5: print 'Capture a web page and save it as an image' print print ' webcapture url zoom outputfile [viewport width]' print print 'Notes: ' print ' \'zoom\' specifies the zoom factor in percent, default is 100%' print ' \'viewport width\' defaults to 1024 (pixels)' print print 'Examples: ' print ' webcapture www.trolltech.com 50 trolltech.png 800' print ' webcapture www.nokia.com 25 nokia.png' print sys.exit(1) url = guess_url_from_string(QString(sys.argv[1])) zoom = max(10, QString(sys.argv[2]).toInt()[0]) filename = QString(sys.argv[3]) width = 1024 if argc < 5 else QString(sys.argv[4]).toInt()[0] app = QApplication(sys.argv) capture = WebCapture() QObject.connect(capture, SIGNAL('done'), QApplication.instance(), SLOT('quit()')) capture.load(url, zoom, filename, width) sys.exit(app.exec_()) -- paul victor noagbodji _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
