C++ 如何在TableView(QtQuick 2)上显示QSqlTableModel中的标题?
我将标题设置为model,但我无法在tableview中显示,为什么?除了modelData之外,可能还有其他一些参数,我可以使用它们将头的名称返回到tableview qml 我无法提供更多的示例,因为您没有我的sql数据库。此代码仅将数据返回到tableview。可能tableview(qt quick 2)无法返回标题 在类TableModel中,我不重写QSqlTableModel中的标准方法 main.cppC++ 如何在TableView(QtQuick 2)上显示QSqlTableModel中的标题?,c++,qt,qml,C++,Qt,Qml,我将标题设置为model,但我无法在tableview中显示,为什么?除了modelData之外,可能还有其他一些参数,我可以使用它们将头的名称返回到tableview qml 我无法提供更多的示例,因为您没有我的sql数据库。此代码仅将数据返回到tableview。可能tableview(qt quick 2)无法返回标题 在类TableModel中,我不重写QSqlTableModel中的标准方法 main.cpp #include <QGuiApplication> #incl
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlTableModel>
#include <QFontDatabase>
#include <QDebug>
#include "TableModel.h"
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("172.17.110.69");
db.setDatabaseName("usb_DB");
db.setUserName("usb_secure");
db.setPassword("QWer!234");
db.setPort(3306);
db.open();
qDebug()<<db.isOpen();
TableModel* model = new TableModel(&app,db);
model->setTable("usb_devices");
model->sort(0,Qt::SortOrder::AscendingOrder);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->setHeaderData(0,Qt::Orientation::Horizontal,"Column0");
model->setHeaderData(1,Qt::Orientation::Horizontal,"Column1");
model->setHeaderData(2,Qt::Orientation::Horizontal,"Column2");
model->setHeaderData(3,Qt::Orientation::Horizontal,"Column3");
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QQmlContext *context = engine.rootContext();
context->setContextProperty("tableModel", model);
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
TableModel.h
#ifndef TABLEMODEL_H
#define TABLEMODEL_H
#include <QtSql/QSqlRelationalTableModel>
#include <QSqlRecord>
class TableModel : public QSqlRelationalTableModel
{
Q_OBJECT
using QSqlRelationalTableModel::QSqlRelationalTableModel;
public slots:
Q_INVOKABLE bool set(int, int, QString);
private:
QSqlRecord rec;
};
#endif // TABLEMODEL_H
\ifndef表格模型
#定义表格模型
#包括
#包括
类TableModel:公共QSqlRelationalTableModel
{
Q_对象
使用QSqlRelationalTableModel::QSqlRelationalTableModel;
公众时段:
Q_可调用布尔集(int,int,QString);
私人:
QSqlRecord;
};
#endif//TABLEMODEL\u H
结果
问题在于,如果中继器型号是数字“n”,则型号数据是从“0”到“n-1”的数字。解决方案是能够从QML访问headerData,对于此问题,必须使用INVOKABLE:
class TableModel:公共QSqlRelationalTableModel
{
Q_对象
公众:
使用QSqlRelationalTableModel::QSqlRelationalTableModel;
Q_可调用的QVariant headerData(int节,Qt::Orientation,int role=Qt::DisplayRole)常量;
};
*.qml
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtQuick.Window 2.11
ApplicationWindow {
id:appWindow
visible: true
TableView {
id: tableView
boundsBehavior:Flickable.StopAtBounds
reuseItems: true
clip: true
columnWidthProvider: function (column) { return 300; }
rowHeightProvider: function () { return 48; }
anchors.fill: parent
topMargin: columnsHeader.implicitHeight
model: tableModel
delegate:ItemDelegate{
id: delegateItem
TextField{
text: modelData
horizontalAlignment: Text.AlignHCenter
}
}
Row {
id: columnsHeader
y: tableView.contentY
z:2
Repeater {
model: tableView.columns > 0 ? tableView.columns : 1
Label {
id: labelRow
width: tableView.columnWidthProvider(index)
height: tableView.rowHeightProvider()
text: modelData
}
}
}
}
}
// ...
Repeater {
model: tableView.columns > 0 ? tableView.columns : 1
Label {
id: labelRow
width: tableView.columnWidthProvider(index)
height: tableView.rowHeightProvider()
text: tableModel.headerData(modelData, Qt.Horizontal) // <---
}
}
// ...
/。。。
中继器{
型号:tableView.columns>0?tableView.columns:1
标签{
id:labelRow
宽度:tableView.columnWidthProvider(索引)
高度:tableView.rowHeightProvider()
text:tableModel.headerData(modelData,Qt.Horizontal)/@eyllansc我做到了什么是tableModel
?@eyllansc我需要我的类模型,用于我的特定任务,但我不重写标准的QSqlTableModel方法。该类包含一些我的方法(用于qml);那么,如果我使用QTableModel,那么我可以观察您显示的内容?@eyllanesc是的,您可以。我提供tableview.h
// ...
Repeater {
model: tableView.columns > 0 ? tableView.columns : 1
Label {
id: labelRow
width: tableView.columnWidthProvider(index)
height: tableView.rowHeightProvider()
text: tableModel.headerData(modelData, Qt.Horizontal) // <---
}
}
// ...