Clipboard

Kopírování dat do schránky používá QMimeData stejně jako drag and drop.

Zavedeme si další formát dat application/x-shape, který opět bude přenášet řětězec znaků.
V tomto případě do řětězce znaků uložíme XML s právě vybranými grafickými prvky.
Pokud máme vybrané grafické prvky vnořené do jiných, tak to nemám dobře vyřešené.

Soubor demo.cc

void MainWindow::on_actionCopy_triggered ()
{
    QString code = "";
    QXmlStreamWriter writer (& code);
    writeBegin (writer);
 
    for (QGraphicsItem * item : scene->selectedItems ())
    {
        writeItem (writer, item);
    }
 
    writeEnd (writer);
 
    QMimeData * data = new QMimeData;
    data->setData (shapeFormat, code.toLatin1 ());
 
    QClipboard * clip = QApplication::clipboard ();
    clip->setMimeData (data);
}

Podobně “paste”.
Ze schránky vyzvedneme QMimeData.
Pokud obsahují náš formát, uložíme řetězec znaků do proměnné code a použijeme již známé funkce pro čtení XML.

void MainWindow::on_actionPaste_triggered ()
{
    QClipboard * clip = QApplication::clipboard ();
    const QMimeData * data = clip->mimeData ();
    if (data->hasFormat (shapeFormat))
    {
       QString code = data->data (shapeFormat);
       QXmlStreamReader reader (code);
       readXml (reader, scene);
    }
    refreshTree ();
}
 
qt/graphics_clipboard.txt · Last modified: 2020/09/30 11:59 by 88.103.111.44
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki