如何让我的QTableView与QSqlTableModel具有复选框和多行?
How do I get my QTableView with QSqlTableModel to have checkboxes and multiline?
我需要我的QTableView
,它使用QSqlTableModel
在列中具有复选框并在其他列中具有多行文本编辑,因为当用户按下 Enter 按钮时我需要新行。这是很多东西,但是如果我能得到表格中的复选框,我就可以制作其余的。
我已经尝试过这个,但它不适用于应用程序崩溃。
这里有答案的问题也无济于事,因为他们正在使用QStandardItemModel
而我严格需要使用QSqlTableModel
.
如何在仍使用QSqlTableModel
的同时完成复选框部分?
您可以像这样为复选框创建自定义委托:
#include <QItemDelegate>
#include <QCheckBox>
#include <QPainter>
class CheckBoxDelegate: public QItemDelegate
{
Q_OBJECT
public:
CheckBoxDelegate(QObject *parent = 0);
void paint( QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index ) const;
QWidget *createEditor( QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index ) const;
void setEditorData( QWidget *editor,
const QModelIndex &index ) const;
void setModelData( QWidget *editor,
QAbstractItemModel *model,
const QModelIndex &index ) const;
void updateEditorGeometry( QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex &index ) const;
mutable QCheckBox * theCheckBox;
private slots:
void setData(bool val);
};
CheckBoxDelegate::CheckBoxDelegate(QObject *parent ):QItemDelegate(parent)
{
}
void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
drawDisplay(painter,option,option.rect,index.model()->data( index, Qt::DisplayRole ).toBool()?QString(" ").append(tr("Yes")):QString(" ").append(tr("No")));
drawFocus(painter,option,option.rect);
}
QWidget *CheckBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
theCheckBox = new QCheckBox( parent );
QObject::connect(theCheckBox,SIGNAL(toggled(bool)),this,SLOT(setData(bool)));
return theCheckBox;
}
void CheckBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
int val = index.model()->data( index, Qt::DisplayRole ).toInt();
(static_cast<QCheckBox*>( editor ))->setChecked(val);
}
void CheckBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
model->setData( index, (int)(static_cast<QCheckBox*>( editor )->isChecked() ) );
}
void CheckBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
editor->setGeometry( option.rect );
}
void CheckBoxDelegate::setData(bool val)
{
emit commitData(theCheckBox);
}
接下来,在代码中将自定义项委托分配给所需的列:
ui->myTable->setItemDelegateForColumn(5,new CheckBoxDelegate(ui->myTable));
相关文章:
- 根据变量使Qt UI中的复选框为已选中/未选中
- "动态创建的事件处理程序"复选框
- 有没有办法在取消选中复选框时隐藏按钮?
- 如何删除Qt设计器中自定义插件的QString属性的"translatable"复选框?
- 设置复选框选项C++
- 如何在所有者描述的 MFC CMenu 派生菜单中显示复选框?
- 如何在MFC对话框应用程序中默认将复选框设置为选中?
- 如何使复选框独占
- AccessObjectFromPoint 返回客户端对象而不是复选框
- Windows 32 API:2个复选框作为一个
- 如何在 QT3 中将复选框添加到 QFileDialog 窗口
- 在 QComboBox 中切换复选框
- 调整QT创建者的复选框
- 如何在C 上创建复选框过滤器
- 如何设置按钮的背景颜色,包括复选框按钮
- 使用 ffh.getFieldType() 检查复选框 == "/Btn" 与 qpdf lib
- 如何在多行文本C++的左上角显示复选框
- Win32如何制作多个复选框并以不同的方式管理它们
- QtableWidget 标题上的复选框
- 如何使用QListView项目添加复选框