[ kazil @ 03.04.2009. 22:54 ] @
Ocigledno da nesto ne primecujem ili u kodu, ili u dokumentaciji.

Python 2.6, PyQT 4.4.4., Windows XP SP2.

Uglavnom, kada dodajem QWidget kao mdiSubWindow ne reaguje na resize() metodu; vidi se samo title bar. Kada obrisem tu liniju gde dodajem taj QWidget u QMdiArea-u, onda resize odradi normalno.

Kod:
Code:

class MainGui():

    def __init__(self, parent=None):
        self.parent = parent
        parent.resize(1000, 600)
        parent.setWindowTitle("Main")

        parent.mdiArea = QMdiArea()
        parent.setCentralWidget(parent.mdiArea)


class ChildGui():

    def __init__(self, parent):
        self.parent = parent
        self.parent.setAttribute(Qt.WA_DeleteOnClose)
        self.parent.resize(200, 200)
        self.parent.setWindowTitle("Child")
        self.lineEdit = QLineEdit(self.parent)


class Child(QWidget):

    def __init__(self, parent):
        QWidget.__init__(self)
        self.parent = parent
        # sledeci red ako se obrise, radi kao sto bi trebalo
        self.parent.mdiArea.addSubWindow(self)
        self.gui = ChildGui(self)


class Main(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self)
        self.gui = MainGui(self)
        
        # ovo inace pozivam preko menija, al' uglavnom je svejedno.
        self.newChildAction()

    def newChildAction(self):
        c = Child(self)
        c.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    m = Main()
    m.show()
    sys.exit(app.exec_())


Main se resizuje kako treba, na 1000x600, ali Child nece.

Sta mi je promaklo? :(

Hvala :)
[ kazil @ 04.04.2009. 21:17 ] @
OK, provalio sam jedan nacin kako radi, ali ima tu iskusnijih, pa molim da me ispravite ako gresim :)

Child ne nasledjuje QWidget nego QMdiSubWindow, i onda unutar njega napravim jedan novi QWidget, koji postavim ovom QMdiSubWindow-u kao glavni widget. Nove widgete (QLineEdit, QLabel, itd.) stavljam na QWidget, a ne na QMdiSubWindow.

Code:

class MainGui():

    def __init__(self, parent=None):
        self.parent = parent
        parent.resize(1000, 600)
        parent.setWindowTitle("Main")

        parent.mdiArea = QMdiArea()
        parent.setCentralWidget(parent.mdiArea)


class ChildGui():

    def __init__(self, parent):
        self.parent = parent
        self.parent.setAttribute(Qt.WA_DeleteOnClose)
        self.parent.resize(200, 200)
        self.parent.setWindowTitle("Child")
        
        self.widget = QWidget(self.parent)
        self.parent.setWidget(self.widget)

        self.line = QLineEdit(self.widget)
        self.label = QLabel(QString('Test label'), self.widget)

        grid = QGridLayout(self.widget)
        grid.addWidget(self.line, 0, 0, 1, 1, Qt.AlignTop)
        grid.addWidget(self.label, 0, 0, 1, 1, Qt.AlignTop)


class Child(QMdiSubWindow):

    def __init__(self, parent):
        QMdiSubWindow.__init__(self)
        self.parent = parent
        self.parent.mdiArea.addSubWindow(self)
        self.gui = ChildGui(self)


class Main(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self)
        self.gui = MainGui(self)
        
        # ovo inace pozivam preko menija, al' uglavnom je svejedno.
        self.newChildAction()

    def newChildAction(self):
        c = Child(self)
        c.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    m = Main()
    m.show()
    sys.exit(app.exec_())