我现在创建了一个mainwindow,然后希望能够在这个窗口中创建一个tableWidget
并在每一行的最后添加一个按钮,用代码怎么实现,以及槽函数写在什么位置,
需要在.h文件中写什么,在cpp文件中写什么
https://blog.csdn.net/taoerit/article/details/37884907
Widget::Widget(QWidget parent) :
QWidget(parent)
{
QHBoxLayout mainLayout = new QHBoxLayout(this);
QTableWidget* tab = new QTableWidget(this);
mainLayout->addWidget(tab);
QStringList list;
list << "col1"<<"col2"<<"col3";
tab->setVerticalHeaderLabels(list);
tab->setColumnCount(3);
tab->insertRow(tab->rowCount());
QPushButton* btn = new QPushButton("btn_1");
tab->setCellWidget(0,2,btn);
connect(btn,SIGNAL(clicked(bool)),this,SLOT(slot_btn_clicked()));
}
Widget::~Widget()
{
}
void Widget::slot_btn_clicked()
{
QMessageBox::information(this,"information","btn_1 clicked");
}
.cpp中的代码
int size = 5;//根据实际需求
QTableWidget *mTableWidget = new QTableWidget(this);
mTableWidget->setRowCount(size);
mTableWidget->setColumnCount(3);
mTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
mTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
QStringList header;
header << "1" << "2" << "button";
mTableWidget->setHorizontalHeaderLabels(header);
for (int i = 0; i < size; i++)
{
QPushButton *btn = new QPushButton(QString("%1").arg(i), this);
mTableWidget->setCellWidget(i, 2, btn);
connect(btn,&QPushButton::clicked,this,&ocx_Desktop::onBtnClicked);
}
layout->addWidget(mTableWidget);
void ocx_Desktop::onBtnClicked()
{
QPushButton * senderObj = qobject_cast(sender());
QString text = senderObj->text();//识别按钮信号,text为btn上的字符
}
.h文件
private slots:
void onBtnClicked();

//在第6列放置”编辑”按钮
QPushButton editButton = new QPushButton(ui.tableWidget_1);
editButton->setText(QString::fromLocal8Bit(""编辑));
ui.tableWidget_1->setCellWidget(i, 5, (QWidget)editButton);
connect(editButton, SIGNAL(clicked()), this, SLOT(FUN1()));
//在槽函数中判断是哪一行的按钮
void FUN()
{
QPushButton editButton = (QPushButton)sender();
for (int i = 0; i < ui.tableWidget_1->rowCount(); i++)
{
QPushButton editButton1 = (QPushButton)ui.tableWidget_1->cellWidget(i, 5);
if (editButton == editButton1)
{
//do something
}
}
}
tableWidget.setCellWidget( int , int , QPushButton)用来设置按钮。至于信号槽函数还是写在构造函数里。
connect( QPushButton,SIGNAL(clicked()), this, SLOT());
你去debug文件里找一下ui_xxx.h文件,这个文件是系统根据你的UI界面自动生成的,反过来也就是说,如果你写的代码和这个文件一样,就可以生成对应的UI界面