используйте таблицу qt с кнопками - PullRequest
1 голос
/ 27 мая 2019

У меня есть таблица с некоторыми данными. Однако, поскольку не вся информация помещается в таблицу, пользователь должен иметь возможность получить дополнительную информацию в строке, нажав кнопку в этой строке. В настоящее время я добавляю кнопки следующим образом:

int lastRow = table->rowCount();
table->insertRow(lastRow);

QWidget* pWidget = new QWidget();
pWidget->setFixedWidth(30);
LdtButton* btn_help = new LdtButton();
btn_help->addInactiveIcon(QPixmap(":/icons/help_inactive.png"));
btn_help->addHoverIcon(QPixmap(":/icons/help_hovered.png"));
QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
pLayout->addWidget(btn_help);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0, 0, 0, 0);
pWidget->setLayout(pLayout);
table->setCellWidget(lastRow, 1, pWidget);

Однако я не знаю, как соединить эти кнопки, поэтому я получаю строку, в которой находилась кнопка, когда она нажималась, чтобы я мог вывести соответствующую информацию. (не в каждом ряду есть кнопка)

1 Ответ

1 голос
/ 27 мая 2019

Используйте сигнал QPushButton::clicked и лямбду для вызова правильного метода (используйте захват для прохождения строки).

QTableWidget* table = new QTableWidget(0, 2);
QStringList values = {"foo", "bar", "spam"};
for (QString const& value : values)
{
    int lastRow = table->rowCount();
    table->insertRow(lastRow);
    table->setItem(lastRow, 0, new QTableWidgetItem(value));
    QWidget* pWidget = new QWidget();
    QPushButton* btn_help = new QPushButton("help");
    QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
    pLayout->addWidget(btn_help);
    pLayout->setAlignment(Qt::AlignCenter);
    pLayout->setContentsMargins(0, 0, 0, 0);
    pWidget->setLayout(pLayout);
    table->setCellWidget(lastRow, 1, pWidget);

    // Call your method in the lambda
    QObject::connect(btn_help, &QPushButton::clicked, [lastRow]() {qDebug() << "Show help for " << lastRow; });

}
table->show();

Будет отображено:

Show help for  0
Show help for  1
Show help for  2
...