From: michele boscolo Date: 2011-08-05T02:34:56+09:00 Subject: Qt ProgressDialog Sorry for my english.....Hello everyone I am here for to ask help. I can not solve from myself. In practice I would to run one method for start the instructions and see the progressbar to progress, I can do this with one thread as you can see from my code, But I would like to avoid using in the thread because when I run instructions more complex as like win32ole open an excel file and copy data, the performance are very slow, I tried to remove Instructions from the thread but the window does not respond, and I update the progressbar at the end of processing, I would my application respond also when he's working on something, I have also tried the trick: timer=Qt::Timer.new(self) timer.start(10) connect(timer, SIGNAL('timeout()'), self, SLOT('update()')) But not work for me. Thank, best regard, main.rb ________________________________________________________________ require 'Qt' require 'window.rb' app = Qt::Application.new(ARGV) win = Window.new win.show win.exec ________________________________________________________________ windows.rb ________________________________________________________________ class Window < Qt::Dialog slots 'update()','run()' def initialize(parent = nil) super(parent) @numberLabel = Qt::Label.new(tr("Number:")) @numberLineEdit = Qt::LineEdit.new("Inser number") @numberLabel.buddy = @numberLineEdit @statusLabel = Qt::Label.new(tr("Please enter one number.")) @connectButton = Qt::PushButton.new(tr("Run")) @connectButton.default = true @quitButton = Qt::PushButton.new(tr("Quit")) @progressDialog = Qt::ProgressDialog.new(self) connect(@connectButton, SIGNAL(:clicked), self, SLOT('run()')) connect(@quitButton, SIGNAL(:clicked), self, SLOT(:close)) topLayout = Qt::HBoxLayout.new do |t| t.addWidget(@numberLabel) t.addWidget(@numberLineEdit) t.addWidget(@connectButton) end buttonLayout = Qt::HBoxLayout.new do |b| b.addStretch(1) b.addWidget(@quitButton) end self.layout = Qt::VBoxLayout.new do |m| m.addLayout(topLayout) m.addWidget(@statusLabel) m.addLayout(buttonLayout) end setWindowTitle(tr("Calculator")) end def run() Qt::Application.overrideCursor = Qt::Cursor.new(Qt::WaitCursor) @statusLabel.text = tr("Elaborazine in corso") @progressDialog.labelText = tr("Elaborazione...") @progressDialog.show() @connectButton.enabled = false @i=0 Thread.new()do while @i<100 sleep 0.1 @progressDialog.maximum = 100 @progressDialog.value = @i @i=@i+1 end end end end -- Posted via http://www.ruby-forum.com/.