【发布时间】:2014-11-24 11:51:20
【问题描述】:
我必须实现什么才能使我自己的布尔小部件与 QDataWidgetMapper 一起使用?
我创建了一个 USER 属性,据我了解,映射器应该使用该属性。
使用(相同的)QDataWidgetMapper 通过 QSqlTableModel 与数据库的交互适用于 qt 自己的小部件,但似乎不适用于我创建的这个小部件。
即使小部件工作并显示数据库数据,更改小部件值不会更改数据库中的值。 [更正:从数据库读取数据到小部件状态正常。]
当前头文件:
#ifndef COMPENSATIONCONTROLCHECKABLE_H
#define COMPENSATIONCONTROLCHECKABLE_H
#include <QAbstractButton>
#include <QWidget>
namespace Ui {
class CompensationControlCheckable;
}
class CompensationControlCheckable : public QAbstractButton
{
Q_OBJECT
Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY compensationChanged USER true )
public:
explicit CompensationControlCheckable(QWidget *parent = 0);
~CompensationControlCheckable();
void setChecked(bool checkd);
const bool isChecked() const;
void paintEvent(QPaintEvent *e);
void resizeEvent(QResizeEvent *e);
private slots:
void on_startCompensation_clicked();
void on_cancelCompensation_clicked();
signals:
void compensationChanged(bool);
void checked(bool);
private:
bool checkedValue;
Ui::CompensationControlCheckable *ui;
};
#endif // COMPENSATIONCONTROLCHECKABLE_H
第 2 版,现在我已经删除了检查覆盖,而是分别在 setCompensation 和 isCompensation 中调用 QAbstractButton setChecked 和 isChecked。构造函数调用 setCheckable(true);。这完全像上面一样工作;从 db 读取正常,写入 db 不起作用:
#ifndef COMPENSATIONCONTROLCHECKABLE_H
#define COMPENSATIONCONTROLCHECKABLE_H
#include <QAbstractButton>
#include <QWidget>
namespace Ui {
class CompensationControlCheckable;
}
class CompensationControlCheckable : public QAbstractButton
{
Q_OBJECT
Q_PROPERTY(bool compensation READ isCompensation WRITE setCompensation NOTIFY compensationChanged USER true )
public:
explicit CompensationControlCheckable(QWidget *parent = 0);
~CompensationControlCheckable();
void setCompensation(bool checkd);
bool isCompensation() const;
void paintEvent(QPaintEvent *e);
void resizeEvent(QResizeEvent *e);
private slots:
void on_startCompensation_clicked();
void on_cancelCompensation_clicked();
signals:
void compensationChanged(bool);
private:
bool compensationValue;
Ui::CompensationControlCheckable *ui;
};
#endif // COMPENSATIONCONTROLCHECKABLE_H
【问题讨论】:
标签: qt user-interface model-view-controller