[kde-edu]: Problem with QVariant on Rocs project (help request)

Tomaz Canabrava tumaix at gmail.com
Fri Aug 15 01:15:48 CEST 2008


it's 'bool'
don't know why, maybe KTextEditor::Document doesn't extends QVariant (or has
a enum { Type } )

I changed the behavior and now it works, i'm saving as an int that
represents the pos on a QList.



On Thu, Aug 14, 2008 at 5:11 PM, Andreas Ramm <psychobrain at gmx.net> wrote:

> What does it say, when qDebug() <<
> item->data(0,FileArea::ScriptRole).typeName()?
>
> There might be a typedef somewhere which would cause problems so it's good
> to
> get the type as QVariant sees it.
>
> On Thu, 14 Aug 2008 10:01:04 pm Tomaz Canabrava wrote:
> > well, that helped the program not-to-crash, but it still doesn't works.
> > new code
> >
> > void FileArea::createNewScript()
> > {
> >    KTextEditor::Editor *e = _mainWindow->editor();
> >    KTextEditor::Document* d = e -> createDocument(0);
> >    d->setMode("JavaScript");
> >    addScript(d->documentName(), d);
> > }
> >
> > void FileArea::addScript(const QString& name, KTextEditor::Document*
> data)
> > {
> >    QTreeWidgetItem *scriptItem = new QTreeWidgetItem(_scriptFolder,
> > ScriptRole); scriptItem->setIcon(0, KIcon("file-new"));
> >    scriptItem->setText(0, name);
> >    scriptItem->setData(0, ScriptRole, data); // ScriptRole = UserType+1
> >     _mainWindow->changeActive(scriptItem);
> > }
> >
> > void MainWindow::changeActive(QTreeWidgetItem * item)
> > {
> >   switch(item->type())
> >   {
> >      case FileArea::ScriptRole : changeActiveScript(item); break; //
> > UserType + 1
> >      case FileArea::GraphRole  : changeActiveGraph(item);  break; //
> > UserType + 2
> >   }
> > }
> >
> >
> >
> > void MainWindow::changeActiveScript(QTreeWidgetItem *item)
> > {
> >   KTextEditor::Document *d = 0;
> >
> >   //! NEVER GETS INSIDE OF THE IF.
> >   //! Cannot Convert the data to a KTextEditor::Document*
> >   //! But the data *IS* a KTextEditor::Document*
> >   //! =/ *frustrated*
> >
> >   if
> > (item->data(0,FileArea::ScriptRole).canConvert<KTextEditor::Document*>()
> )
> > {
> >     d = item->data(0,
> > FileArea::ScriptRole).value<KTextEditor::Document*>(); _scriptingArea ->
> > setDocument( d );
> >     guiFactory()->addClient(_scriptingArea->view());
> >   }
> >
> >   // _scriptingArea -> setDocument(0); outside of the if will work,
> >   // and create a new document, but I want to restore a previously
> created
> > one. // any help is apreciated.
> > }
> >
> > On Wed, Aug 13, 2008 at 4:33 PM, Andreas Ramm <psychobrain at gmx.net>
> wrote:
> > > Try using item->data(0,
> > > FileArea::ScriptRole)).value<KTextEditor::Document*>()
> > > to access your data and item->data(0,
> > > FileArea::ScriptRole)).canConvert<KTextEditor::Document*>() to check if
> > > you actually have that type inside QVariant. Note the template syntax
> in
> > > both of
> > > those methods. Other helpful methods when dealing with QVariant are
> > > type() and typeName() which help you finding out what a QVariant
> > > contains.
> > >
> > > Andreas
> > >
> > > On Thu, 14 Aug 2008 02:52:48 am Tomaz Canabrava wrote:
> > > > I'v spend all morning working on Rocs trying to implement a
> > >
> > > multi-document
> > >
> > > > panel interface,
> > > > almost everything is good, but this little piece of code here is
> > > > somewhat broken,
> > > > my head hurts, anybody can show some light on this, pretty please,
> with
> > > > sugar on top?
> > > >
> > > > void FileArea::createNewScript(){
> > > >    KTextEditor::Editor *e = _mainWindow->editor();
> > > >    KTextEditor::Document* d = e -> createDocument(0);
> > > >    d->setMode("JavaScript");
> > > >    addScript(d->documentName(), d);
> > > > }
> > > >
> > > > void FileArea::addScript(const QString& name, KTextEditor::Document*
> > >
> > > data){
> > >
> > > >    QTreeWidgetItem *scriptItem = new QTreeWidgetItem(_scriptFolder);
> > > >    scriptItem->setIcon(0, KIcon("file-new"));
> > > >    scriptItem->setText(0, name);
> > > >    scriptItem->setData(0, ScriptRole, data);
> > > >   _mainWindow->changeActive(scriptItem);
> > > > }
> > > >
> > > > void MainWindow::changeActiveScript(QTreeWidgetItem *item){
> > > >   KTextEditor::Document *d = item->data(0, FileArea::ScriptRole));
> > > >   _scriptingArea->setDocument( d );
> > > >   guiFactory()->addClient(_scriptingArea->view());
> > > > }
> > > >
> > > > ERROR:
> > > >
> > > > cannot convert 'QVariant' to 'KTextEditor::Document*' in
> initialization
> > > > the line   KTextEditor::Document *d = item->data(0,
> > > > FileArea::ScriptRole)); gives me a QVariant,
> > > > I'v tried to qobject_cast<KTextEditor*>(item->data(0,
> > > > FileArea::ScriptRole)); but also without luck.
> > > >
> > > > Anybody can give-me some light? i'm stuck here almost all morning.
> > >
> > > _______________________________________________
> > > kde-edu mailing list
> > > kde-edu at mail.kde.org
> > > https://mail.kde.org/mailman/listinfo/kde-edu
>
>
> _______________________________________________
> kde-edu mailing list
> kde-edu at mail.kde.org
> https://mail.kde.org/mailman/listinfo/kde-edu
>



-- 
Um Computador sem Windows é como um Navio sem dançarinas de Can-Can
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/kde-edu/attachments/20080814/b805f21d/attachment-0001.html 


More information about the kde-edu mailing list