From kde-bindings Tue Feb 16 11:54:00 2010 From: Arno Rehn Date: Tue, 16 Feb 2010 11:54:00 +0000 To: kde-bindings Subject: Re: [Kde-bindings] Qt, Qyoto buttons work intermediately Message-Id: <201002161254.00606.arno () arnorehn ! de> X-MARC-Message: https://marc.info/?l=kde-bindings&m=126632197922394 On Tuesday 16 February 2010 10:29:11 linuxoid.au@gmail.com wrote: > > I need the exact code please. With code snippets alone I can't reproduce > > what you did there. > > Please download the code from here: > http://qt-giraff.svn.sourceforge.net/viewvc/qt-giraff/trunk/source/ > > MainApplication - main window class > startui - 1st stacked widget page > basicvideo.cs - 2nd stacked widget page > > What I want to do is to take all these signals from StartVideoCodec() in > MainApplication and corresponding SLOTS: > > private void StartVideoCodec() { > basicVideoPage = new QWidget(); > stackWidget.AddWidget(basicVideoPage); > stackWidget.SetCurrentIndex(1); > basicvideowin = new BasicVideoWindowUI(); > basicvideowin.BasicVideoUI(this, basicVideoPage); > Connect(basicvideowin.txtSource, SIGNAL("textChanged(QString)"), this, > SLOT("enableStart()")); // - this one Connect(basicvideowin.btnSource, > SIGNAL("clicked()"), this, SLOT("GetSource()")); // - this one > Connect(basicvideowin.btnDestination, SIGNAL("clicked()"), this, > SLOT("GetDestination()")); // - this one Connect(basicvideowin.btnStart, > SIGNAL("clicked()"), this, SLOT("StartCodec()")); // - this one > Connect(basicvideowin.btnQuit, SIGNAL("clicked()"), qApp, SLOT("quit()")); > // - this one } > > [Q_SLOT] > private void GetSource() { > string dir = QFileDialog.GetExistingDirectory(this); > basicvideowin.txtSource.Text = dir; > } > > [Q_SLOT] > private void GetDestination() { > string dir = QFileDialog.GetExistingDirectory(this); > basicvideowin.txtDestination.Text = dir; > } > > [Q_SLOT] > private void StartCodec() { > string param = "kwrite " + QFileDialog.GetOpenFileName(this); > QProcess play = new QProcess(this); > play.Start(param); > } It doesn't work because you have this line on top of your BasicVideoUI(QMainWindow mainwin, QWidget page) method: mainwin = new QMainWindow(); Obviously this breaks the rest. That's why I would like to have small test cases, if possible. I don't want to dig through hundreds of lines of irrelevant source code just to find out that the 'bug' is really just PEBCAK. Sorry, but I don't really have the time for this. Another tip for the design: Currently you have only one custom subclass and a lot of classes that operate on it. Design-wise it's better to create more QWidget subclasses for you different stack widget pages. You can then have signals and slots for each stack widget page. That doesn't clutter your MainWindow class and its meta object. And a last tip: look at what is printed in the terminal. That's often quite helpful. In this case it printed: Object::connect: No such slot QMainWindow::enableStart() Object::connect: No such slot QMainWindow::GetSource() Object::connect: No such slot QMainWindow::GetDestination() Object::connect: No such slot QMainWindow::StartCodec() Which made it obvious that something was wrong with the class reference contained in the "mainwin" var. So, please: next time something doesn't work and you suspect it to be a bug, please try to make a minimal app which exhibits the behaviour. That makes life easier for all of us ;) -- Arno Rehn arno@arnorehn.de _______________________________________________ Kde-bindings mailing list Kde-bindings@kde.org https://mail.kde.org/mailman/listinfo/kde-bindings