使用 QSignalMapper 时更新映射
Updating mapping when using QSignalMapper
我在表视图的最后一列中创建了一个 QPushButton(其中包含连接到我的应用程序的客户端的 IP 地址)。使用该按钮,我可以使用按钮释放信号和插槽 'handlebutton(int)'.
断开该特定行中已连接的客户端
密码是-
MainWindow::MainWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSortFilterProxyModel *model = new QSortFilterProxyModel(this);
model = pCApp->guiClient()->getConnectionManagement()->getProxyModel();
ui->tableView->setModel(model);
QPushButton *button;
QSignalMapper *mapper = new QSignalMapper(this);
QObject::connect(mapper, SIGNAL (mapped(int)), this, SLOT (handleButton(int)));
for (int i = 0; i < model->rowCount(); i++)
{
button = new QPushButton;
button->setText("Disconnect " + QString::number(i));
button->setStyleSheet("QPushButton { color: #E5E5E5; }");
ui->tableView->setIndexWidget(model->index(i,2, QModelIndex()), button);
QObject::connect(button, SIGNAL(released()), mapper, SLOT(map()));
mapper->setMapping(button, i);
}
setAttribute(Qt::WA_DeleteOnClose);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::handleButton(int row)
{
CGuiClientMessage message;
message.setRecipient(CGuiMessage::R_GUISERVER);
message.setObjectId(0);
message.setCommand(CGuiMessage::DISCONNECT_PEER);
message.Parameter().setAttribute("Peers", ui->tableView->model()->data(ui->tableView->model()->index(row,1)).toString());
pCApp->guiClient()->SendMessageToPts(message);
}
现在,我想更新映射。我应该在插槽中或其他地方的什么地方进行操作?拜托,如果有人可以建议我如何以及在哪里做?
提前致谢!
如果我没看错,您只想在按钮被单击并且相应的客户端断开连接后立即取消映射。然后你可以在适当的按钮上调用 mapper->removeMapping(button)
。如果您需要再次映射此按钮 - 再次调用 mapper->setMapping(button, i)
。
请记住,它不会断开来自映射器的按钮 released
信号。如果需要 - 明确使用 QObject::disconnect
。
此外,如果您的按钮被破坏 - removeMapping
和 disconnect
都已为您完成,因此您不必担心。
我在表视图的最后一列中创建了一个 QPushButton(其中包含连接到我的应用程序的客户端的 IP 地址)。使用该按钮,我可以使用按钮释放信号和插槽 'handlebutton(int)'.
断开该特定行中已连接的客户端密码是-
MainWindow::MainWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSortFilterProxyModel *model = new QSortFilterProxyModel(this);
model = pCApp->guiClient()->getConnectionManagement()->getProxyModel();
ui->tableView->setModel(model);
QPushButton *button;
QSignalMapper *mapper = new QSignalMapper(this);
QObject::connect(mapper, SIGNAL (mapped(int)), this, SLOT (handleButton(int)));
for (int i = 0; i < model->rowCount(); i++)
{
button = new QPushButton;
button->setText("Disconnect " + QString::number(i));
button->setStyleSheet("QPushButton { color: #E5E5E5; }");
ui->tableView->setIndexWidget(model->index(i,2, QModelIndex()), button);
QObject::connect(button, SIGNAL(released()), mapper, SLOT(map()));
mapper->setMapping(button, i);
}
setAttribute(Qt::WA_DeleteOnClose);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::handleButton(int row)
{
CGuiClientMessage message;
message.setRecipient(CGuiMessage::R_GUISERVER);
message.setObjectId(0);
message.setCommand(CGuiMessage::DISCONNECT_PEER);
message.Parameter().setAttribute("Peers", ui->tableView->model()->data(ui->tableView->model()->index(row,1)).toString());
pCApp->guiClient()->SendMessageToPts(message);
}
现在,我想更新映射。我应该在插槽中或其他地方的什么地方进行操作?拜托,如果有人可以建议我如何以及在哪里做?
提前致谢!
如果我没看错,您只想在按钮被单击并且相应的客户端断开连接后立即取消映射。然后你可以在适当的按钮上调用 mapper->removeMapping(button)
。如果您需要再次映射此按钮 - 再次调用 mapper->setMapping(button, i)
。
请记住,它不会断开来自映射器的按钮 released
信号。如果需要 - 明确使用 QObject::disconnect
。
此外,如果您的按钮被破坏 - removeMapping
和 disconnect
都已为您完成,因此您不必担心。