rubyQT

C

Carl Bourne

Hi,

I wonder if you can help. I'm currently exploring rubyqt in conjunction
with the latest QT4 libraries. However, I can't seem to get a TextEdit
widget to refresh properly. My code runs correctly when I click the
button that has a ruby function assigned to it, but the TextEdit field
does not update until the ruby function completes.

Here's the code I'm using:-


--------------------------------------------------------------------------------------------------
main.rb
----------
require 'Qt'
require 'dialog.rb'
app = Qt::Application.new(ARGV)
dialog = Dialog.new
dialog.exec

------
dialog.rb
-------

class MyWidget < Qt::Widget
slots 'go()'
def initialize(parent = nil)
super(parent)
setFixedSize(500, 500)
@textedit = Qt::TextEdit.new(self)
@textedit.setGeometry(5, 50, 480, 300)

quit = Qt::pushButton.new(('Generate'), self)
quit.setGeometry(5, 5, 100, 30)
quit.setFont(Qt::Font.new('Arial', 12, Qt::Font::Bold))
connect(quit, SIGNAL:)clicked)) {@textedit.clear(); go() }
end

def go
# @textedit.clear()
@textedit.setText("Generating files:-")
count = 0
50.times do
count+=1
sleep 0.1
@textedit.append("Generating file: "+count.to_s)
puts "hello"
end
@textedit.append("Done")
end
end
app = Qt::Application.new(ARGV)
widget = MyWidget.new()
widget.show()
app.exec()
 
R

Rob Kaufman

Hi Carl,

Assuming that the problem your having is that you type and not text
shows up, I was not able to reproduce the issue. I did have to make
the following changes to get your code to run at all:

------
my_widget.rb
-------

class MyWidget < Qt::Widget
slots 'go()'
def initialize(parent = nil)
super(parent)
setFixedSize(500, 500)
@textedit = Qt::TextEdit.new(self)
@textedit.setGeometry(5, 50, 480, 300)

quit = Qt::pushButton.new(('Generate'), self)
quit.setGeometry(5, 5, 100, 30)
quit.setFont(Qt::Font.new('Arial', 12, Qt::Font::Bold))
connect(quit, SIGNAL:)clicked)) {@textedit.clear(); go() }
end

def go
# @textedit.clear()
@textedit.setText("Generating files:-")
count = 0
50.times do
count+=1
sleep 0.1
@textedit.append("Generating file: "+count.to_s)
puts "hello"
end
@textedit.append("Done")
end
end
if $0 == __FILE__
a = Qt::Application.new(ARGV)
w = MyWidget.new
a.mainWidget = w # **IMPORTANT ADDITION**
w.show
a.exec
end


You'll notice that I'm only using one file (my_widget.rb) instead of
the two file structure you had before. The main.rb would work like
this:

------
main.rb
-------

require 'my_widget'
a = Qt::Application.new(ARGV)
w = MyWidget.new
a.mainWidget = w
w.show
a.exec

'exec'ing in multiple places, instantiating more than one instance of
Qt::Application and not adding the main widget to the application
instance are all issues I saw in your code that are fixed in the
above.

Hope That Helps,
Rob Kaufman
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,189
Latest member
CryptoTaxSoftware

Latest Threads

Top