Bitte, tu das nicht so.
Wenn Sie ein Kartenspiel erstellen, müssen Sie Karten erstellen, keine Schaltflächen, auch können Sie sie nicht in Layouts einfügen. Das Problem ist, dass das Layout-Management-System von Qt alt ist und es nicht wirklich Elemente in den Monitor als erste Klassen ctzens berücksichtigt - es im Layout arrangieren, das ist es.
Wenn Sie in Kartenspielen und Qt sind, haben Sie zwei einfache Möglichkeiten:
1 - Old Style (und die, die ich wirklich wissen, wie man unterrichtet) - QGraphivsView
Erstellen Sie Ihre Karte Klasse basierend auf QGraphicsRectItem, und überschreiben Sie die Ereignisse mousePress und mouseRelease, um Klicken und Ziehen zu ermöglichen.
class Card : public QObject, public QGraphicsRectItem {
Q_OBJECT
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *ev)
{
clicked();
startDrag = true;
}
void mouseReleaseEvent(QGraphicsSceneMouseEvent *ev)
{
if(!startDrag)
return;
setPos(ev->pos());
startDrag = false;
}
void mouseMoveEvent(QGraphicsSceneMouseEvent *ev)
{
if (!startDrag)
return();
setPos(ev->pos());
}
signals:
void clicked();
};
erstellen Sie dann auch eine neue Klasse auf QGraphivsView basiert, die dem Board sein wird, und die Karten-Algorithmus auf der Grundlage Ihrer Verfügung zu arrangieren.
2 - Der Stil, den ich nicht lehren kann: QML.
Wenn Sie sich überlappen möchten, verwenden Sie kein Rasterlayout und positionieren Sie die Widgets nicht selbst. – SPlatten
Welches Layout sollte ich dafür verwenden? vertikal? – nocturne
Keine, Sie müssen kein Layout verwenden, Sie können die Widgets auf dem Display selbst positionieren. Wenn Ihre Hauptanwendungsklasse von QMainWindow abgeleitet ist, können Sie direkt darauf rendern. – SPlatten