小编gpl*_*lus的帖子

Qt/Qml和方法重载

刚刚从Qml中调用重载的C++方法并尝试理解其背后的原因时,遇到了Qt框架的奇怪行为.假设我有一个QList<QVariant>类似于以下方法的类:

...
Q_SLOT void append(const QVariant &item);
Q_SLOT void append(const QVariantList &items);
Q_SLOT void insert(int index, const QVariant &item);
Q_SLOT void insert(int index, const QVariantList &items);
...
Run Code Online (Sandbox Code Playgroud)

QML:

onclicked: {
  var itemCount = myListObject.size();
  myListObject.insert(itemCount, "Item " + (itemCount + 1));
}
Run Code Online (Sandbox Code Playgroud)

Qt的某种方式决定将调用void insert(int index, const QVariantList &items)与过载items参数设置为一个null QVariant空的QVariantList,而不是void insert(int index, const QVariant &item)具有过载QStringQVariant.

现在,如果我按如下方式更改声明的顺序,它将按预期工作:

Q_SLOT void insert(int index, const QVariantList &items);
Q_SLOT …
Run Code Online (Sandbox Code Playgroud)

c++ qt moc qml

10
推荐指数
1
解决办法
2694
查看次数

QGraphicsItem setPos不移动项目的位置

我所拥有的内容类似于以下内容:

int main(int argc, char **argv) {
  QApplication app(argc, argv);
  MainWindow appWindow;
  appWindow.show();
  return app.exec();
}
class MainWindow : public QMainWindow {
  ...
private:
  QGraphicsScene *mScene;
  QGraphicsView *mView;
  QGraphicsItem *mItem;
  QPushButton *mButton1, *mButton2;
};
MainWindow::MainWindow(...) {
  mScene = new QGraphicsScene(this);
  mScene->setItemIndexMethod(QGraphicsScene::NoIndex);
  mView = new QGraphicsView(mScene, this);
  mView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
  mButton1 = new QPushButton("Create Item", this);
  QObject::connect(mButton1, SIGNAL(clicked()), ...);
  mButton2 = new QPushButton("Set Item Position");
  QObject::connect(mButton2, SIGNAL(clicked()), ...);
}
void MainWindow::button1Clicked() {
  mItem = new QGraphicsSimpleTextItem("Test Item");
  mItem->setPos(mItem->pos() + QPointF(7.0f, 7.0f)); …
Run Code Online (Sandbox Code Playgroud)

qt qgraphicsitem

0
推荐指数
1
解决办法
8895
查看次数

标签 统计

qt ×2

c++ ×1

moc ×1

qgraphicsitem ×1

qml ×1