Qt5 QPushButton的无法单击?!

问题描述

您有没有无法单击的按钮?

我有一个继承的窗口小部件game_widget,其中声明了9个QPushButton,它们通过方法init_ui存储在数组中;还有一个布局窗口小部件,应该在其上放置按钮放置。构造函数中还调用init_ui函数。这是该类的主要元素:

class game_widget : public QWidget
{
    Q_OBJECT
    
    public:
    // The layout  widget for the buttons
    QWidget* gridLayoutWidget = new QWidget(this);

    QPushButton** fields; // Fields list
    QPushButton* field1 = new QPushButton(gridLayoutWidget);
    ...
    QPushButton* field9 = new QPushButton(gridLayoutWidget);
    ...

    private:
    void init_ui();
};

这里是init_ui

void game_widget::init_ui()
{
    fields = new QPushButton* [9]; // Fields list
    fields[0] = field1;
    ...
    fields[8] = field9;

    ...

    // Preparing layout for the buttons
    gridLayoutWidget->setGeometry(QRect(10,10,531,531));
    qgridLayout* grid_layout = new qgridLayout(gridLayoutWidget);

    // Adding each field to the layout
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
        {
            fields[i * 3 + j]->setMaximumSize(QSize(170,170));
            fields[i * 3 + j]->setMinimumSize(QSize(170,170));
            grid_layout->addWidget(fields[i * 3 + j],i,j);
        }
}

现在的问题是,这些按钮甚至不可单击-更不用说将鼠标悬停在它们上也无济于事,没有动画。关于他们的其他任何事情都没有改变,因此他们的行为应该是正常的,但事实并非如此。如果您几乎不知道会发生什么情况,请提供帮助。

解决方法

您正在QPushButtons中另外创建9个void game_widget::init_ui(),请尝试以下操作:

void game_widget::init_ui()
{
    QVector <QPushButton*> fields; // Fields list
    fields[0] << field1;
    ...
    fields[8] << field9;

    ...

    // Preparing layout for the buttons
    gridLayoutWidget->setGeometry(QRect(10,10,531,531));
    QGridLayout* grid_layout = new QGridLayout(gridLayoutWidget);

    // Adding each field to the layout
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
        {
            fields[i * 3 + j]->setMaximumSize(QSize(170,170));
            fields[i * 3 + j]->setMinimumSize(QSize(170,170));
            grid_layout->addWidget(fields[i * 3 + j],i,j);
        }
}