处理来自动态按钮阵列的信号
Processing signals from a dynamic button array
我正在创建一个类,它是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继承的自定义按钮,所以您可以在该类中存储所需的额外信息。
请记住,由于动态大小的原因,您还必须以编程方式进行按钮的布局。
相关文章:
- Qt VTK交互风格的信号到小部件
- OpenMP阵列性能较差
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 如何在没有信号的情况下从C++执行QML插槽
- 当我的阵列太大时出现分段错误
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 位阵列上的快速AND运算
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- SIGABRT(信号6)在使用分治法查找阵列中的多数元素时出错
- 通过Qt中的信号/插槽发送2D阵列
- 处理来自动态按钮阵列的信号