考虑这个简单的枚举类:
#include <QObject>
class BookTypes : public QObject
{
Q_GADGET
Q_ENUMS(AllBooksType)
public:
enum AllBooksType{
eMagazine,
eReference,
eTextBook,
eThesis
};
signals:
public slots:
};
Run Code Online (Sandbox Code Playgroud)
输入注册 main()
qmlRegisterUncreatableType<BookTypes>("trial", 1, 0, "BookTypes",
"Don't create qml instance for BookTypes");
Run Code Online (Sandbox Code Playgroud)
这是QML示例:
Rectangle {
id: rect
x: 100; y: 100
width: 100
height: 70
color: "PowderBlue"
border.color: "RoyalBlue"
border.width: 1
radius: 3
MouseArea{
x: 0; y: 0
height: parent.height
width: parent.width
property int bt: BookTypes.eTextBook //perfect. now bt is 2
onClicked: {
console.debug("old book type:- ") …Run Code Online (Sandbox Code Playgroud) 我有一个集合定义为 -
using Parameters = std::vector<int>;
using Group = std::pair<std::string, Parameters>;
std::vector<Group> inputs;
Run Code Online (Sandbox Code Playgroud)
我的意图是使用像这样的陈述
inputs.push_back(group0 /*What goes in here ?*/);
inputs.push_back(group1 /*What goes in here ?*/);
Run Code Online (Sandbox Code Playgroud)
如何初始化group0和group1使用初始化列表?像这样的代码似乎不起作用
inputs.push_back(std::make_pair("group0", {1, 2, 3, 4}));
Run Code Online (Sandbox Code Playgroud)
编辑:有是矢量,对初始化已经存在的问题,但我看不出任何地方second的std::pair又是一个集合.
在假设的例子中,我有一个C++组件 -
class Board : public QObject
{
Q_OBJECT
public:
//Q_PROPERTYs go here
explicit Board(int rows, int columns)
{
matrix = std::vector<int>(rows, std::vector<int>(columns, 0));
}
~Board()
{
matrix.clear();
}
Q_INVOKABLE void checkAndUpdateAdjecentCells(int row, int column);
//setters and getters here.
signals:
void matrixUpdated();
private:
Board(QObject *parent) = default; //i intend to do this.
Board(Board& b) = delete;
int nRows_, nCols_;
std::vector<std::vector> matrix;
};
Run Code Online (Sandbox Code Playgroud)
注册于main()像-
qmlRegisterType<Board>("SameGameBackend", 1, 0, "BubbleBoard");
Run Code Online (Sandbox Code Playgroud)
题
如何在QML中实例化这样,以便调用参数化构造函数?
预期的QML代码 -
BubbleBoard{
id: bboard
rows: 10
columns: 10 …Run Code Online (Sandbox Code Playgroud)