我正在制作一个QWidget
后代的类,该类由按钮(按钮表)组成。现在,此对象发送的信号很简单:void wasClicked(size_t x, size_t y)
在网格中发送按钮坐标。但是为此,我需要将QPushButton
的点击信号连接到我的小部件。由于插槽/信号的数量取决于运行时未确定的网格大小,因此我无法提前创建足够的插槽。那我该怎么办?
我将连接按钮,以便它们都将信号发送到同一插槽。
我没有测试此代码。这只是一个概念证明的尝试
class ButtonTable : public QWidget
{
Q_OBJECT
public:
ButtonTable()
void createButtons();
private:
int height;
int width;
QVector<Button*> buttons
private slots:
btnClicked();
};
void ButtonTable::createButtons() {
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; j++) {
Button* btn = new Button(this);
btn.row = i;
btn.col = j;
connect(button, SIGNAL(clicked()), this, SLOT(btnClicked()));
buttons.push_back(btn);
}
}
}
void ButtonTable::btnClicked()
{
Button *btn = qobject_cast<Button *>(sender());
//Do something with button
}
class Button : public QToolButton
{
Q_OBJECT
public:
explicit Button(QWidget *parent = 0);
int row;
int col;
};
因此,有许多按钮,但是每个clicked()按钮都移至一个插槽。您可以找到QObject :: sender()所按下的按钮,并且由于它们是继承自QToolButton的自定义按钮,因此您可以在该类中存储所需的其他信息。
请记住,由于动态尺寸,您还必须以编程方式对按钮进行布局。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句