Ondersteuning > Programmeren
Qt4 Application [QT3 Application]
Koen Bokern:
Hoi,
Ik ben nu bezig met qt designer een app te maken.
Ik heb eigenlijk qua design alles af.. Nu de functionaliteit nog. De sluitbutton werkt zoals het hoort. Echter nu wil ik een simpel test slot maken.
Nu heb ik deze code
--- Code: ---void Form5::convert()
{
Form5.lineEdit1.setFocus(true);
}
--- Einde van code ---
Ik koppel de button "convert" aan het slot convert(). Deze wordt prima gevonden dus. Echter wanneer ik nu vrolijk test en op de betreffende button klik wordt de focus niet gelegd op lineEdit1.
Daarnaast vraag ik me af hoe ik een shell command kan gebruiken. Of is dit niet mogelijk?
profoX:
Eén grote tip: laat Qt 3 vallen en concentreer je op Qt 4. Qt 3 is bij wijze van spreken nog van de Middeleeuwen. Het integreert momenteel misschien beter met KDE 3, maar dat is dan ook een versie van KDE die de komende jaren steeds minder belangrijk zal worden en zal verdwijnen. Qt 4 is minstens 200 keer beter, gestructureerder en moderner ;)
Maar over je programma: setFocus() kan je niet aanroepen met een boolean argument. En je neemt een omweg, want setFocus() is zelf ook een slot, simpeler zou dus zijn om de button "convert" aan het slot setFocus() van die lineEdit1 te hangen als dat het enige is wat moet gebeuren.
Kijk ook eens of de terminal geen foutmelding geeft bij het uitvoeren van het programma, want signal/slot-verbindingen worden in run-time pas gelegd.
Shell commando's gebruiken: Met Qt kan je QProcess gebruiken. Zie de API documentatie en de voorbeelden.
Koen Bokern:
Ik heb nu qt4-designer... Maar dit voorbeeldje was alleen even om te testen :)
Maar ik wil het eigenlijk toch maar met pyqt doen... Maar hoe kan ik van dit grafische nu een werkende app krijgen? Ik wil dus wanneer je op de knop "Convert" klikt, dat er een commando wordt uitgevoerd met de oa de tekst uit een QTextEdit als input
Koen Bokern:
Oke... Ik ben even geheel overnieuw begonnen en ben nu best ver:
--- Code: ---#!/usr/bin/python
# icon.py
import sys
import os
from PyQt4 import QtGui, QtCore
import urllib2
class flv2mp3(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
# window layout
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('flv2mp3 - youtube ripper 1.01')
self.setWindowIcon(QtGui.QIcon('icons/favicon-vfl1123.png'))
self.resize(500, 350);
# Label
self.mainlabel = QtGui.QLabel('FLV2MP3Kopieer de url van een youtube filmpje, en plak het in de input balk.', self)
self.mainlabel.resize(500,90)
# Youtube uri
self.yuriLabel = QtGui.QLabel('Youtube URL:', self)
self.yuriInput = QtGui.QLineEdit(self)
self.yuriLabel.setGeometry(10, 80, 100, 20)
self.yuriInput.setGeometry(90, 80, 400, 20)
# Naam
self.mp3naamLabel = QtGui.QLabel('Mp3 naam:', self)
self.mp3naamInput = QtGui.QLineEdit(self)
self.mp3naamLabel.setGeometry(10, 110, 100, 20)
self.mp3naamInput.setGeometry(90, 110, 400, 20)
# Locatie
self.locatieLabel = QtGui.QLabel('Opslaan in:', self)
self.locatieInput = QtGui.QLineEdit(self)
self.locatieLabel.setGeometry(10, 140, 100, 20)
self.locatieInput.setGeometry(90, 140, 400, 20)
self.locatieInput.setText('~/Bureaublad/');
# Ripknop
ripknop = QtGui.QPushButton('Rip', self)
ripknop.setGeometry(10, 10, 60, 35)
# Sluitknop
quit = QtGui.QPushButton('Sluiten', self)
quit.setGeometry(10, 10, 60, 35)
hbox = QtGui.QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(ripknop)
hbox.addWidget(quit)
vbox = QtGui.QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.connect(quit, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
self.connect(ripknop, QtCore.SIGNAL("clicked()"), self.ripstart)
def ripstart(self):
dirname = '/home/koen/Youtube/'
baseurl="http://youtube.com/get_video.php?"
urltorip = "http://testurl.nl" # Dit werkt, maar als ik deze gebruik werkt het niet:: self.yuriInput.text()
nameofvideo = self.mp3naamInput.text()
if not os.path.isdir(dirname):
os.mkdir(dirname)
opener1 = urllib2.build_opener()
page1 = opener1.open(urltorip)
tempfile = page1.read()
filename = dirname+'urlsource.txt'
fOut = open(filename, "wb")
fOut.write(tempfile)
fOut.close()
print urltorip;
app = QtGui.QApplication(sys.argv)
flv2mp3 = flv2mp3()
flv2mp3.show()
sys.exit(app.exec_())
--- Einde van code ---
Dit werkt dus al. Echter aks ik dus de url van het bestand dat gedownload wordt definieer vanuit de lineedit dan krijg ik deze error:
koen@koenux-server1-generic:~/Bureaublad/flv2mp3$ python flv2mp3.py
Traceback (most recent call last):
File "flv2mp3.py", line 77, in ripstart
page1 = opener1.open(urltorip)
File "/usr/lib/python2.5/urllib2.py", line 373, in open
protocol = req.get_type()
AttributeError: get_type
print urltorip geeft overigens wel de url die ik had ingevoerd.
profoX:
Het probleem is dat je een QString terugkrijgt en geen normale string, probeer dit:
urltorip = str(self.yuriInput.text())
Nog een paar opmerkingen:
* /home/koen bestaat natuurlijk niet bij iedereen.. probeer eens QtCore.QDir.homePath()
* baseurl wordt niet gebruikt?
* gebruik QLayouts om de items netjes op het scherm te krijgen
(en overweeg om je formulier in qt designer te ontwerpen, lijkt me handiger)
* ik zie waar je naartoe wil door de source naar een file te schrijven, maar dat lijkt me onnodig.. hou die tekst gewoon allemaal in het geheugen.. zomaar bestandjes aanmaken vind ik creepy.
Navigatie
[0] Berichtenindex
[#] Volgende pagina
Naar de volledige versie