#include "ChooseDlg.h" #include <QVBoxLayout> ChooseDlg::ChooseDlg(QWidget *parent) : QDialog(parent) { QVBoxLayout* lay = new QVBoxLayout(this); lay->addWidget(_buttons[0] = new QPushButton("人机对战")); lay->addWidget(_buttons[1] = new QPushButton("人人对战")); for(int i=0; i<2; ++i) { connect(_buttons[i], SIGNAL(clicked()), this, SLOT(slotClicked())); } } void ChooseDlg::slotClicked() { QObject* s = sender(); for(int i=0; i<2; ++i) { if(_buttons[i] == s) { this->_selected = i; break; } } accept(); } ChooseDlg::~ChooseDlg() { }
时间: 2024-01-13 20:04:36 浏览: 96
这段代码是一个 Qt 程序中的一个自定义对话框类 `ChooseDlg` 的实现。该对话框中包含两个按钮,一个用于人机对战,另一个用于人人对战。当用户点击其中一个按钮时,对话框将关闭并发出 `accept` 信号,表示用户已经做出了选择。
以下是该类的一些详细说明:
- 构造函数:
```c++
ChooseDlg::ChooseDlg(QWidget *parent) : QDialog(parent)
{
QVBoxLayout* lay = new QVBoxLayout(this);
lay->addWidget(_buttons[0] = new QPushButton("人机对战"));
lay->addWidget(_buttons[1] = new QPushButton("人人对战"));
for(int i=0; i<2; ++i)
{
connect(_buttons[i], SIGNAL(clicked()), this, SLOT(slotClicked()));
}
}
```
在构造函数中,我们使用 `QVBoxLayout` 布局来添加两个按钮。我们还使用 `connect` 方法将按钮的 `clicked` 信号连接到 `ChooseDlg` 类的 `slotClicked` 槽函数上。这将在用户单击按钮时触发 `slotClicked` 函数。
- 槽函数:
```c++
void ChooseDlg::slotClicked()
{
QObject* s = sender();
for(int i=0; i<2; ++i)
{
if(_buttons[i] == s)
{
this->_selected = i;
break;
}
}
accept();
}
```
在 `slotClicked` 槽函数中,我们首先获取发送信号的控件,并遍历 `_buttons` 数组来确定是哪个按钮发送了信号。我们将选定的选项存储在 `_selected` 成员变量中,并调用 `accept` 方法来关闭对话框并发出 `accept` 信号。
- 析构函数:
```c++
ChooseDlg::~ChooseDlg()
{
}
```
析构函数为空,因为 `ChooseDlg` 类不需要进行任何资源清理。
总的来说,这个类的作用是提供一个对话框,在该对话框中用户可以选择人机对战或人人对战。当用户做出选择后,对话框将关闭,并发出 `accept` 信号,以便其他部分的代码可以知道用户的选择。
阅读全文