如何单击TableView按钮在Qt中打开另一个对话窗口?

时间:2018-01-30 02:27:38

标签: c++ qt

我有一个由4行4列组成的tableView。在最后一栏中,每个单元都有一个按钮。我试图点击每列的按钮打开另一个.ui表单。所以对于4按钮,我需要打开4个相同的.ui形式。具体来说,我将打开一个表进行编辑。如何点击QPush按钮打开.ui表格? 以下是 buttoncolumndelegate.h

#include "buttoncolumndelegate.h"

ButtonColumnDelegate::ButtonColumnDelegate(QObject *parent) :
    QItemDelegate(parent)
{

}
    void ButtonColumnDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
    QPushButton detail(index.data().toString());
    detail.setGeometry(option.rect);
    detail.setText("Detail");
    painter->save();
    painter->translate(option.rect.topLeft());
    detail.render(painter);
    painter->restore();
}

void ButtonColumnDelegate::setEditorData(QWidget *editor,
                                     const QModelIndex &index) const
{
    QPushButton *detail = qobject_cast<QPushButton *>(editor);
    detail->setProperty("Detail", "Detail");
    detail->setText("Detail");
    (void) index;
}

void ButtonColumnDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                    const QModelIndex &index) const
{
    QPushButton *detail = qobject_cast<QPushButton *>(editor);
    detail->setGeometry(20,20,20,20);
    model->setData(index, detail->property("Detail"));

}

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

这是dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include "buttoncolumndelegate.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    mybutton = new ButtonColumnDelegate(this);
    mModel = new QStandardItemModel(4,4,this);
    ui->tableView->setModel(mModel);
    ui->tableView->setItemDelegateForColumn(3, mybutton);

}

Dialog::~Dialog()
{
    delete ui;
}                 

单击按钮并打开.ui(表格)后,如何创建可点击连接的任何线索都会很棒。

1 个答案:

答案 0 :(得分:0)

你做错了。代理中的编辑器模式 - 用于句柄编辑。你应该通过委托手动绘制一个按钮和hadle cmouse事件。

或者您可以在视图上使用setIndexWidget来创建按钮。