gpt4 book ai didi

qt - 如何在 QGridLayout 中获取小部件的行/列位置?

转载 作者:行者123 更新时间:2023-12-03 23:23:43 25 4
gpt4 key购买 nike

我制作了一个自己的 GridPushButton 类来将按钮位置存储在 gridlayout 中。父级是 QPushButton 。我在询问窗口中的 x 和 y 坐标时遇到问题(如 x:654、y:768)。我认为它将从基类继承,但事实并非如此。现在我有两个选择:

  • 使用原始的 QPushButton 类并以某种方式获取其在网格布局中的位置(如 x:0, y:1 如果它位于第一行和第二列)或
  • 使用我的 GridPushButton 并以某种方式获取窗口中的 x 和 y 坐标。
    class GridPushButton : public QPushButton
    {
    Q_OBJECT
    public:
    GridPushButton(int coordX, int coordY, QWidget *parent = 0);
    int coordinateX() { return _coordX; }
    int coordinateY() { return _coordY; }

    protected:
    int _coordX;
    int _coordY;
    };

  • 这是我的课。我试图创建一个新的私有(private)变量并给它 QPushButton::x() ,但不起作用。从 parent 那里获得x和y坐标的任何想法?
    或者有什么想法可以在 GridLayout 中获得 QPushButtons 位置?

    最佳答案

    您混淆了两种坐标概念。在父小部件中有位置。可通过 QWidget::x() 获得, QWidget::y()QWidget::pos()方法。你不需要在这里实现任何东西:它已经可以工作了。
    然后是网格布局中的行和列的概念。这可以在不需要任何子类化的情况下获得。网格布局知道它的小部件在哪里,您可以简单地向它询问任何小部件的行/列位置。
    screenshot

    #include <QtWidgets>

    struct Pos { int row = -1, col = -1; };

    Pos gridPosition(QWidget * widget) {
    if (! widget->parentWidget()) return {};
    auto layout = qobject_cast<QGridLayout*>(widget->parentWidget()->layout());
    if (! layout) return {};
    int index = layout->indexOf(widget);
    Q_ASSERT(index >= 0);
    int _;
    Pos pos;
    layout->getItemPosition(index, &pos.row, &pos.col, &_, &_);
    return pos;
    }

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    QWidget w;
    QGridLayout l(&w);
    QLabel gridPos;
    l.addWidget(&gridPos, 0, 0, 1, 4);
    for (int i = 1; i < 4; ++ i)
    for (int j = 0; j < 3; ++ j) {
    auto b = new QPushButton(QString("%1,%2").arg(i).arg(j));
    l.addWidget(b, i, j);
    QObject::connect(b, &QPushButton::clicked, [&gridPos, b]{
    auto p = gridPosition(b);
    gridPos.setText(QString("Grid Pos: %1,%2")
    .arg(p.row).arg(p.col));
    });
    }
    w.show();
    return a.exec();
    }

    关于qt - 如何在 QGridLayout 中获取小部件的行/列位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24189202/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com