2014-11-24 73 views
0

我必須實現什麼才能使自己的布爾小部件與QDataWidgetMapper一起使用?如何實現用於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版,現在我已刪除檢查覆蓋,而是調用QAbstractButton setChecked和器isChecked在setCompensation和分別是補償。構造函數調用setCheckable(true);.這與上面的完全一樣。從數據庫確定讀取,寫入到數據庫不起作用:

#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 

回答

1

QDataWidgetMapper傾向於使用與USER true的財產及其映射,但有已經one called checked in QAbstractButton使用該屬性。您可能需要在構造函數中調用isCheckable(true);

+0

對於QDataWidgetMapper的5.3文檔說,以下所以我有上面的USER屬性應該可以嗎?你從哪裏獲得「價值」財產的想法? 「 」默認情況下,每個控件的用戶屬性用於在模型和控件之間傳輸數據。由於Qt 4.3,額外的addMapping()函數允許使用命名屬性來代替默認的用戶屬性。 – savolai 2014-11-24 12:10:09

+0

確實:再次查看'QAbstractButton'已經有一個名爲checked的用戶屬性 – 2014-11-24 12:11:34

+0

所以,你到底在說什麼?我的上面的例子應該工作? (Q更新,實際上它讀取數據庫好,只是不寫入數據庫) – savolai 2014-11-24 12:12:57