first qml prototype

This commit is contained in:
2025-08-24 09:44:51 +02:00
parent e0a50bade4
commit ff536243ac
14 changed files with 113 additions and 40 deletions

35
quick/quickview.qml Normal file
View File

@@ -0,0 +1,35 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
TableView
{
id: table
anchors.fill: parent
columnSpacing: 2
rowSpacing: 2
model: meinModel // z.B. QStandardItemModel mit 9 Spalten
delegate: Rectangle
{
required property string display
width: 100
height: 20
border.color: "#ccc"
Text
{
anchors.centerIn: parent
text: display
font.pixelSize: 10
}
}
// // Optional: Spaltenbreiten setzen
// onModelChanged: {
// for (let i = 0; i < model.columns; ++i)
// table.setColumnWidth(i, 100)
// }
}

View File

@@ -1,8 +0,0 @@
Window {
id: popup
width: 300
height: 200
visible: true
flags: Qt.Dialog | Qt.WindowStaysOnTopHint
title: "QML-Fenster"
}

View File

@@ -107,16 +107,16 @@ namespace XQAppData
namedInsert( "icn63Dummy", QStyle::SP_FileDialogToParent );
namedInsert( "icn64Dummy", QStyle::SP_ToolBarHorizontalExtensionButton );
namedInsert( "icn65Dummy", QStyle::SP_DialogOkButton );
namedInsert( "FileIcon", QStyle::SP_FileIcon );
namedInsert( "FileIcon", QStyle::SP_FileIcon );
namedInsert( "icn67Dummy", QStyle::SP_ToolBarVerticalExtensionButton );
namedInsert( "icn68Dummy", QStyle::SP_DialogResetButton );
namedInsert( "icn70Dummy", QStyle::SP_FileLinkIcon );
namedInsert( "TrashIcon", QStyle::SP_TrashIcon );
namedInsert( "TrashIcon", QStyle::SP_TrashIcon );
namedInsert( "icn72Dummy", QStyle::SP_DialogSaveButton );
namedInsert( "icn73Dummy", QStyle::SP_MediaPause );
namedInsert( "VistaShield", QStyle::SP_VistaShield );
namedInsert( "VistaShield", QStyle::SP_VistaShield );
namedInsert( "icn75Dummy", QStyle::SP_DialogYesButton );
namedInsert( "icn76Dummy", QStyle::SP_MediaPlay );
namedInsert( "MediaPlay", QStyle::SP_MediaPlay );
namedInsert( "icn77Dummy", QStyle::SP_DirClosedIcon );
namedInsert( "icn79Dummy", QStyle::SP_MediaSeekBackward );
namedInsert( "DirHomeIcon", QStyle::SP_DirHomeIcon );

View File

@@ -86,10 +86,10 @@ XQItem* XQMainModel::addProjectItem( XQNodePtr contentNode )
void XQMainModel::addSectionItem( const XQModelSection& section, XQItem* projectItem )
{
/*
/*
XQNodePtr sheetNode = projectItem->sheetNode()->find_child_by_tag_name("CurrentSection");
XQItem* newItem = _itemFactory.makeItem(sheetNode, &section.contentType() );
projectItem->appendRow( newItem );
XQItemList list = _itemFactory.makeRow( XQItemFactory::mSingle, sheetNode, nullptr, c_ContentType );
projectItem->appendRow( list );
_treeTable->expand( projectItem->index() );
*/
}

View File

@@ -16,6 +16,7 @@
#include <QFileDialog>
#include <QMessageBox>
#include <QPushButton>
#include <QQmlContext>
#include <xqmainwindow.h>
#include <xqcommand.h>
@@ -91,15 +92,7 @@ void XQMainWindow::initMainWindow()
connect( _mainTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(onTreeItemClicked(QModelIndex)) );
connect( _tabWidget, SIGNAL(tabBarClicked(int)), this, SLOT(onTabClicked(int)) );
connect( _tabWidget, SIGNAL(tabBarClicked(int)), this, SLOT(onTabClicked(int)) );
/*
XQQuickWidget* butt = new XQQuickWidget;
butt->resize(800,600);
butt->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
butt->move( 1200,300);
butt->show();
*/
/*
connect( &_mainModelView, &XQViewModel::itemCreated, this, [=, this](XQItem* item)
@@ -124,7 +117,7 @@ void XQMainWindow::initMainWindow()
// #2. load demo data
loadDocument( c_DocumentFileName1 );
//loadDocument( c_DocumentFileName2 );
loadDocumentQML( c_DocumentFileName2 );
qDebug() << " --- all here: " << XQNode::s_Count;
@@ -279,12 +272,13 @@ void XQMainWindow::onTreeItemClicked(const QModelIndex& index )
void XQMainWindow::onTabClicked( int index )
{
//const QString& key = _documentStore[index].treeItem->attribute( c_ProjectID );
qDebug() << " ---- tab clicked: " << index << " : " << _documentStore[index].friendlyName;// << ": " << key;
//qDebug() << " ---- tab clicked: " << index << " : " << _documentStore[index].friendlyName;// << ": " << key;
//_mainTreeView->setCurrentIndex( _documentStore[index].treeItem->index() );
}
void XQMainWindow::onSectionCreated( const XQModelSection& section )
{
qDebug() << " --- XXX section created: " << section.contentType() << ":" << section.sheetRootNode()->to_string();
if( _currentProjectItem )
{
_mainModelView.addSectionItem( section, _currentProjectItem );
@@ -296,6 +290,56 @@ void XQMainWindow::onSectionToggled( const XQModelSection& section )
//qDebug() << " --- XXX section toggled: " << section.contentType() << ":" << section.sheetRootNode()->to_string();
}
QStandardItemModel* createModel() {
auto* model = new QStandardItemModel;
model->setHorizontalHeaderLabels({ "Name" });
QStandardItem* parent = new QStandardItem("Tiere");
parent->appendRow(new QStandardItem("Hund"));
parent->appendRow(new QStandardItem("Katze"));
model->appendRow(parent);
return model;
}
void XQMainWindow::loadDocumentQML( const QString& fileName )
{
// gibts die Datei?
if( !QFile::exists( fileName) )
throw XQException( "no such file", fileName );
XQNodeFactory treeLoader;
// xml daten laden
XQNodePtr rawTree = treeLoader.load_tree( qPrintable(fileName) );
// versteckten root node ignorieren
XQNodePtr contentRoot = rawTree->first_child();
// 'friendly Name' ist ein Link auf ein anderes Attribute
// das als Namen verwendet wird.
const QString& fName = contentRoot->friendly_name();
QStandardItemModel* model = createModel();
// Ein neues Child-Model erzeugen
XQChildModel* childModel = new XQChildModel(this);
// die Modelstruktur anlegen
childModel->initModel( c_ChildModelName );
// model inhalte laden
childModel->addModelData( contentRoot->first_child() );
XQQuickWidget* quickChild = new XQQuickWidget(_tabWidget);
//quickChild->setResizeMode(QQuickWidget::SizeViewToRootObject);
quickChild->rootContext()->setContextProperty("meinModel", childModel);
quickChild->setSource(QUrl(QStringLiteral("qrc:/quickview.qml")));
_tabWidget->addTab( quickChild, "Fitze!" );
_tabWidget->setCurrentWidget( quickChild );
quickChild->setResizeMode(QQuickWidget::SizeRootObjectToView);
}
//! liest eine XML datei namens 'fileName'
void XQMainWindow::loadDocument( const QString& fileName )
@@ -347,9 +391,7 @@ void XQMainWindow::loadDocument( const QString& fileName )
// neuen eintrag im übsichts-baum erzeugen
_currentProjectItem = _mainModelView.addProjectItem( contentRoot );
//_documentStore.addDocument( fileName, pTitle, _currentProjectItem, childModel );
qDebug() << " --- ZZZ und jetzt:";
_documentStore.addDocument( fileName, pTitle, _currentProjectItem, childModel );
// die Modelstruktur anlegen
childModel->initModel( c_ChildModelName );

View File

@@ -60,6 +60,7 @@ protected:
// fixme implement
void showDocumnet( const QString& key ){}
void loadDocument( const QString& fileName );
void loadDocumentQML( const QString& fileName );
void saveDocument( const QString& fileName );

View File

@@ -469,7 +469,7 @@ QVariant XQItem::data(int role ) const
case Qt::ToolTipRole:
{
return rawText() + ":" + unitTypeToString() + ":" + renderStyleToString() + ":" + unitTypeToString() + ":" + itemFlagsToString();
return itemType().text() + ":: " + rawText() + ":" + unitTypeToString() + ":" + renderStyleToString() + ":" + unitTypeToString() + ":" + itemFlagsToString();
}
//

View File

@@ -51,7 +51,6 @@ void XQItemFactory::initItemFactory( const QString& modelSheetFileName )
for( const XQNodePtr& typeSheetNode : _typesSheet->children())
{
XQItemType* itemType = new XQItemType;
//const QString& typeName = typeSheetNode->tag_name();
const QString& typeName = typeSheetNode->tag_name();
configureItemType(itemType, typeSheetNode);

View File

@@ -586,7 +586,7 @@ void XQViewModel::onShowContextMenu(const QPoint& point)
QHash<int, QByteArray> XQViewModel::roleNames() const
{
QHash<int, QByteArray> roles;
QHash<int, QByteArray> roles = QStandardItemModel::roleNames();
roles[XQItem::ContentRole] = "content";
roles[XQItem::ItemTypeRole] = "itemType";
roles[XQItem::RenderStyleRole] = "renderStyle";

View File

@@ -14,7 +14,8 @@
#include <xqquickwidget.h>
XQQuickWidget::XQQuickWidget()
XQQuickWidget::XQQuickWidget(QWidget *parent)
: QQuickWidget(parent)
{
}

View File

@@ -20,8 +20,10 @@
class XQQuickWidget : public QQuickWidget
{
Q_OBJECT
public:
XQQuickWidget();
XQQuickWidget(QWidget *parent = nullptr);
};
#endif // XQQUICKWIDGET_H

View File

@@ -84,7 +84,6 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
DISTFILES += \
../quick/xqmodelview.qml \
README.md \
xml/modelsheets.xml \
xml/modeldata1.xtr \

View File

@@ -1,8 +1,10 @@
<RCC>
<qresource prefix="/">
<file>../xml/modeldata1.xtr</file>
<file>../xml/modeldata2.xtr</file>
<file>../xml/modeldata3.xtr</file>
<file>../xml/modelsheets.xml</file>
<file alias="modeldata1.xtr">../xml/modeldata1.xtr</file>
<file alias="modeldata2.xtr">../xml/modeldata2.xtr</file>
<file alias="modeldata3.xtr">../xml/modeldata3.xtr</file>
<file alias="modelsheet.xml">../xml/modelsheets.xml</file>
<file alias="quickview.qml">../quick/quickview.qml</file>
</qresource>
</RCC>

View File

@@ -8,8 +8,8 @@
<ItemTypes>
<TreeParentType RenderStyle="PlainStyle" ItemFlags="IsEnabled|IsDropEnabled" Icon="DirIcon" />
<TreeChildType RenderStyle="PlainStyle" ItemFlags="IsEnabled" Icon="DesktopIcon"/>
<TreeSectionType RenderStyle="PlainStyle" ItemFlags="IsUserCheckable|IsEnabled" Icon="DirIcon"/>
<TreeSectionType RenderStyle="PlainStyle" ItemFlags="IsEnabled" Icon="DesktopIcon"/>
<TreeChildType RenderStyle="PlainStyle" ItemFlags="IsUserCheckable|IsEnabled" Icon="MediaPlay"/>
<HeaderType RenderStyle="HeaderStyle" ItemFlags="IsEnabled"/>
<HiddenType RenderStyle="HiddenStyle"/>
<StaticType RenderStyle="PlainStyle"/>