Обновление отображения при использовании 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);
}

Теперь я хочу обновить отображение. Где мне это сделать в слоте или где-то еще? Пожалуйста, если кто-нибудь может подсказать мне, как и где это сделать?

Заранее спасибо!

1 ответ

Решение

Если я правильно понял, вы просто хотите отменить отображение кнопки, как только она была нажата и соответствующий клиент был отключен. Тогда вы можете просто позвонить mapper->removeMapping(button) на соответствующей кнопке. Если вам нужно снова отобразить эту кнопку - позвоните mapper->setMapping(button, i) снова.

Имейте в виду, это не отключить кнопку released сигнал от картографа. Если вам нужно - используйте QObject::disconnect явно.

Также, если ваша кнопка будет разрушена - оба removeMapping а также disconnect сделано для вас, так что вам не нужно беспокоиться об этом.

Другие вопросы по тегам