c++qtqtablewidgetqtablewidgetitem

Add a QPushButton into a QTableWidgetItem in a QTableWidget, How to make it Qt::AlignHCenter


for (int i = 0; i < page.size(); i++) {
    User user = Poco::AnyCast<User>(*it);
    ui.table->setItem(i, 0, new QTableWidgetItem(user.userName)); 
    ui.table->setItem(i, 1, new QTableWidgetItem(user.sex));
    ui.table->setItem(i, 2, new QTableWidgetItem(user.age));
        
    QPushButton* btn_edit = new QPushButton();
    btn_edit = new QPushButton();
    btn_edit->setText("Edit");
    ui.table->setCellWidget(i, 3, (QWidget*)btn_edit);

    ++it;
}
    

I add a QPushButton into the cell with the function setCellWidget(). I know that if it's a QTableWidgetItem, I can use:

ui.table->item(0, 3)->setTextAlignment(QT::AlignHCenter)

But it is a widget, so using:

QTableWidgetItem item = ui.table->item(0, 3); 

item is null.

I can get the cell using:

ui.table->cellWidget(0, 3)

What should I do to make the button centered in the cell?


Solution

  • Try this:

    QWidget* pWidget = new QWidget();
    QPushButton* btn_edit = new QPushButton();
    btn_edit->setText("Edit");
    QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
    pLayout->addWidget(btn_edit);
    pLayout->setAlignment(Qt::AlignCenter);
    pLayout->setContentsMargins(0, 0, 0, 0);
    pWidget->setLayout(pLayout);
    ui.table->setCellWidget(i, 3, pWidget);