Ciao a tutti sono qui per chiedere un aiuto, in qunato da solo proprio
non riesco a risolverlo, in pratica io vorrei lanciare metodo che svolge
delle istruzzioni, e vedere mentre le svolge la progressbar che avanza,
questo riesco a farlo con un thread come si puo vedere dal mio codice,
però vorrei evitare di usare in thread in quanto, se eseguo istruzzioni
più complesse tipo aprire con win32ole un file excel e copiare dei dati,
le prestazioni sono improponibili, ho provato a togliere le istruzzioni
dal thread ma la finestra non risponde, e mi aggiorna la progressbar
alla fine dell’elaborazione, in pratica vorrei che la mia applicazione
rispondesse anche quando sta elaborando qualcosa, ho provato anche con
il trucco:
timer=Qt::Timer.new(self)
timer.start(10)
connect(timer, SIGNAL(‘timeout()’), self, SLOT(‘update()’))
ma non riesco a farlo funzionare.
Grazie.
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