gpt4 book ai didi

c++ - QSignalMapper 用法;分配给一个信号的多个 QPushButton

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:06 24 4
gpt4 key购买 nike

编辑:下面的代码已更新为工作解决方案。

为了向 QT 介绍自己,我尝试用 64 个 QPushButtons 设计一个棋盘。我知道这可能不是最好的方法,但我相信从基础开始是一个很好的学习方法。无论如何,所有 64 个按钮基本上都会做同样的事情。所有按钮的点击信号都将调用同一个函数,将关联的 QPushButton 传递给该函数。我没有在 qtcreator 和 qtdesigner 中单独创建每个 QPushButton,也没有为每个按钮单独创建每个 on_clicked 信号函数,而是尝试应用 QSignalMapper。这是我目前所拥有的:

国际象棋.h

#ifndef CHESS_H
#define CHESS_H

#include <QMainWindow>
#include <QSignalMapper>
#include <QPushButton>
#include <QGridLayout>
#include <QMessageBox>

namespace Ui {
class Chess;
}

class Chess : public QMainWindow
{
Q_OBJECT

public:
explicit Chess(QWidget *parent = 0);
~Chess();

public slots:
void On_Clicked(int location);

private:
Ui::Chess *ui;

QPushButton *buttons[64];
};

#endif // CHESS_H

国际象棋.cpp

#include "chess.h"
#include "ui_chess.h"

Chess::Chess(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Chess)
{
QSize button_size(100, 100);
ui->setupUi(this);

QGridLayout *layout = new QGridLayout;
QSignalMapper *signalMapper = new QSignalMapper(this);
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(On_Clicked(int)));

for (int i = 0; i < 64; i++) {
QString t = QString::number(i);
buttons[i] = new QPushButton(t, this);
buttons[i]->setMinimumSize(button_size);
signalMapper->setMapping(buttons[i], i);
connect(buttons[i], SIGNAL(clicked()), signalMapper, SLOT(map()));
layout->addWidget(buttons[i], i / 8, i % 8);
}

QWidget* central_widget = new QWidget(this);
central_widget->setLayout(layout);
setCentralWidget(central_widget);

}

Chess::~Chess()
{
delete ui;
}

void Chess::On_Clicked(int location) {
QMessageBox msgbox;
msgbox.setText(QString::number(location) + " was pushed");
msgbox.exec();

}

这将创建以下输出:

enter image description here

我希望点击任何按钮的行为会弹出一个 QMessageBox,说明按钮已按下,如 On_Clicked 函数中所定义的那样。显然我误解了一些东西,但我无法弄清楚。 QSignalMapper 是为这种行为设计的吗?看完还以为是this example.

谢谢!

最佳答案

On_Clicked 是一个信号,因此您需要为其连接一个插槽。或者只是将 On_clicked 更改为插槽并将信号映射(int)连接到它(然后使用 SLOT 关键字)。

请注意,您定义的 On_Clicked 函数不是您需要的类方法。

关于c++ - QSignalMapper 用法;分配给一个信号的多个 QPushButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22568446/

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