[kde-edu]: Problem with QVariant on Rocs project (help request)
Tomaz Canabrava
tumaix at gmail.com
Thu Aug 14 14:01:04 CEST 2008
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
>
--
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/4ffc0c3c/attachment.html
More information about the kde-edu
mailing list