我需要实现什么才能使我自己的布尔小部件与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 ok读取,写入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
答案 0 :(得分:1)
QDataWidgetMapper
更喜欢使用带有USER true
的属性进行映射,但已经one called checked in QAbstractButton
使用该属性。您可能需要在构造函数中调用isCheckable(true)
;