QT开发中文网

QStandardItem中添加一个小按钮c++

在使用QStandardItem时,可以通过自定义委托(Delegate)来实现在单元格中添加小按钮。以下是一个示例代码:

#include <QApplication>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QTableView>
#include <QPushButton>
#include <QDebug>

class ButtonDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    explicit ButtonDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {}

    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        if (index.column() == 0) // 只有第一列显示按钮
        {
            QPushButton *button = new QPushButton("Click", parent);
            connect(button, &QPushButton::clicked, this, [index]() {
                qDebug() << "Button clicked at index:" << index.row();
            });
            return button;
        }
        return QStyledItemDelegate::createEditor(parent, option, index);
    }

    void setEditorData(QWidget *editor, const QModelIndex &index) const override
    {
        if (QPushButton *button = qobject_cast<QPushButton *>(editor))
        {
            button->setText(index.data(Qt::DisplayRole).toString());
        }
        else
        {
            QStyledItemDelegate::setEditorData(editor, index);
        }
    }

    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
    {
        if (QPushButton *button = qobject_cast<QPushButton *>(editor))
        {
            model->setData(index, button->text(), Qt::DisplayRole);
        }
        else
        {
            QStyledItemDelegate::setModelData(editor, model, index);
        }
    }

    void updateEditorGeometry(QWidget *editor,
                              const QStyleOptionViewItem &option,
                              const QModelIndex &index) const override
    {
        editor->setGeometry(option.rect);
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QStandardItemModel model(4, 2); // 创建一个4行2列的模型

    // 设置表头
    model.setHeaderData(0, Qt::Horizontal, "按钮");
    model.setHeaderData(1, Qt::Horizontal, "文本");

    // 添加数据和按钮
    for (int row = 0; row < 4; ++row)
    {
        QModelIndex index = model.index(row, 0);
        model.setData(index, QString("按钮%1").arg(row + 1), Qt::DisplayRole);

        index = model.index(row, 1);
        model.setData(index, QString("文本%1").arg(row + 1), Qt::DisplayRole);
    }

    QTableView tableView;
    tableView.setModel(&model);

    ButtonDelegate delegate;
    tableView.setItemDelegateForColumn(0, &delegate); // 第一列使用自定义委托

    tableView.show();

    return app.exec();
}

#include "main.moc"

此示例中,通过自定义ButtonDelegate继承自QStyledItemDelegate,在单元格中创建了一个名为”Click”的QPushButton,并与clicked信号连接。当点击按钮时,会打印出相应的行索引。

这样就可以在QStandardItem中添加一个小按钮了。你可以根据需要进行修改和适配。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=6067

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?