J'ai créé un QPushButton dans la dernière colonne de tableview (qui contient l'adresse IP des clients connectés à mon application). Avec ce bouton, je suis capable de déconnecter le client connecté dans cette rangée en utilisant le signal de libération de bouton et le slot 'handlebutton (int)'.Mise à jour du mappage lors de l'utilisation de QSignalMapper
Le code est -
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);
}
Maintenant, je veux mettre à jour la cartographie. Où dois-je faire cela dans la fente ou ailleurs? S'il vous plaît, si quelqu'un peut me suggérer comment et où le faire?
Merci d'avance!
Merci pour cette réponse rapide. J'ai utilisé mapper-> setMapping (bouton, i) dans la boucle, mais cela ne semble pas fonctionner. Pouvez-vous dire où dois-je le placer? – tanmayb
@tanmayb, c'est déjà une question différente. [Voici un exemple] (http://doc.qt.io/qt-5/qsignalmapper.html) comment utiliser 'setMapping (bouton, ...)' dans une boucle. Fais juste la même chose. Si cela ne fonctionne pas bien, je recommande de commencer par cartographier un seul bouton, puis d'ajouter une boucle pour en mapper quelques autres. De plus, à des fins de débogage, vous pouvez créer un slot 'handleButton' pour afficher un message simple sur la console. Et la dernière chose que je recommanderais, est d'utiliser la [syntaxe Qt 5] (http://doc.qt.io/qt-5/signalsandslots.html) pour les connexions de signaux et de slots. – WindyFields