每个item中都包含读写按钮,如何才能坐到每个item中读到的数据是不一样的,因为pushButton 对应的槽函数只有一个
我的想法加一个map映射,按钮和寄存器控件,这样在pushbutton的槽函数里判断哪个button,然后map到对应寄存器控件,你qt基础挺好的,不用我写代码了吧
为每个item设置objectName,通过name去判断点击的按钮
通过点击槽获取item,这里可以转化成任意的由QWidget继承空间、如QPushButton和QLabel等
void ListWidgetTest::on_listWidget_itemClicked(QListWidgetItem *item)
{
QWidget* pwig = ui->listWidget->itemWidget(item); // 获取里面的QWidget
同时可以设置每个item的数据
QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
pItem->setData(Qt::UserRole, QVariant::fromValue(user)); // 设置用户数据
void onItemClicked(QListWidgetItem *item)
{
QVariant variant = item->data(Qt::UserRole); // 获取用户数据
User user = variant.value<User>();
qDebug() << "ID : " << user.nID; qDebug() << "Name : " << user.strName;
}
可以这么干
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//动态添加控件
QGridLayout *mainLayout = new QGridLayout;
//初始化所有控件
for (int i = 0; i < 3; i++)
{
QPushButton *btn = new QPushButton("read");
QLineEdit *le = new QLineEdit("line"+QString::number(i));
connect(btn, &QPushButton::clicked, [=]() {
btnClicked(i);
});
mainLayout->addWidget(btn, i , 0);
mainLayout->addWidget(le, i, 1);
}
ui->widget->setLayout(mainLayout);
}
MainWindow::~MainWindow()
{
delete ui;
}
// 自定义函数
void MainWindow::btnClicked(int index)
{
QGridLayout *m_historyLayout = (QGridLayout *)ui->widget->layout();
QLineEdit* le = (QLineEdit*)m_historyLayout->itemAtPosition(index, 1)->widget();
qDebug() << index << le->text();
}