Ondersteuning > Programmeren

Qt4 Application [QT3 Application]

(1/12) > >>

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