0
我在tableview的最后一列(包含连接到我的应用程序的客户端的IP地址)中创建了一个QPushButton。使用该按钮,我可以使用按钮释放信号和插槽'handlebutton(int)'断开与该特定行中连接的客户端的连接。使用QSignalMapper时更新映射
的代码 -
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-> setMapping(button,i),但它似乎不起作用。你能告诉我应该把它放在哪里吗? – tanmayb
@tanmayb,这已经是一个不同的问题。 [这里是一个例子](http://doc.qt.io/qt-5/qsignalmapper.html)如何在循环中使用'setMapping(button,...)'。只要做同样的事情。如果效果不好,我建议先从一个按钮开始映射,然后再添加一个循环来映射更多。另外,为了调试目的,你可以使'handleButton'插槽向控制台输出一个简单的消息。我推荐的最后一件事就是使用[Qt 5语法](http://doc.qt.io/qt-5/signalsandslots.html)进行信号和插槽连接。 – WindyFields