画像ファイルの表示 その2
Ruby/Qteの勉強 その27
大きな画像を表示させたい場合はQScrollViewを使用する、メインウィンドウ上にQScrollViewの窓を用意してそこを通して画像ファイルの一部を覗くという感じ? スクロールバーを操作することで画像の各部分を表示させることができる。
大きな画像はそれなりに反応が遅いっす(^^;
@iSV = QScrollView.new( self ) # スクロールビュー作成 @iSV.setGeometry(0,100,635,300) @image = ImgWidget.new( @iSV ) # 画像オブジェクト @iSV.addChild( @image )
ImgWidgetクラスの中でloadした画像ファイルのサイズを取得してそれをsetFixedSizeで自分自身のサイズにしている。昨日の例では通常のメソッドdrawでも表示できたけど、スクロールさせたときの再描画が行われないことが判明。今日はpaintEventでの描画のみとした。
#!/usr/bin/env ruby require "qte" require "qpe" include Qte include Qpe class SampleWindow < QMainWindow def initialize() super() setCaption(tr("サンプル")) @msg = QLabel.new(tr("画像表示のサンプル"),self) @msg.setGeometry(0,0,310,35) $ebox1 = QLabel.new( self ) $ebox1.setGeometry(0,40,600,35) @iSV = QScrollView.new( self ) @iSV.setGeometry(0,100,635,300) @image = ImgWidget.new( @iSV ) @iSV.addChild( @image ) @image.load( nil ) # ダミーロードしないと終了してしまう @pb1 = QPushButton.new( tr("表示"), self) @pb1.setGeometry(320,5,100,30) connect(@pb1, QSIGNAL("clicked()"), self, 'drawImage') end def drawImage #画像ファイルのロードと表示 @image.load("/home/zaurus/Documents/Image_Files/xxx.jpg") @image.update() # @image.dwaw # メソッドによる描画はNG end end class ImgWidget < QWidget def initialize( parent ) super( parent ) # parentが無いと表示しない catchEvent end def load( file ) @image = QImage.new( file ) x, y = @image.width, @image.height # 画像サイズ取得 setFixedSize( x, y) $ebox1.setText("Size X=#{x.to_s}, Y=#{y.to_s}") # サイズ表示 end # def draw # 普通のメソッドはスクロール時に機能しない # @paint = QPainter.new( self ) # @paint.drawImage( 0, 0, @image) # @paint.end # end def paintEvent( e ) @paint = QPainter.new( self ) @paint.drawImage( 0, 0, @image) @paint.end end end $defaultCodec = QTextCodec.codecForName("utf8") app = QPEApplication.new([$0]+ARGV) app.setDefaultCodec($defaultCodec) QApplication.setFont(QFont.new("lcfont",18)) app.showMainWidget(SampleWindow.new) app.exec