メモリデータptrをqt入力フィールドに "リンク"する方法はありますか?メモリデータptrをqt入力フィールドにマッピング
メモリが変更された場合、データビューは動的にリフレッシュされます。 入力が完了するとメモリデータが上書きされます。
私はfox guiツールキット(FXDataTargetクラス)でこの機能を持っていました。 qtには同じ/類似のものが必要です。
メモリデータptrをqt入力フィールドに "リンク"する方法はありますか?メモリデータptrをqt入力フィールドにマッピング
メモリが変更された場合、データビューは動的にリフレッシュされます。 入力が完了するとメモリデータが上書きされます。
私はfox guiツールキット(FXDataTargetクラス)でこの機能を持っていました。 qtには同じ/類似のものが必要です。
私はそれが最善の解決策である言っていないんだけど、次のように可能なアプローチは、次のようになります。
Qobject
を継承。detectChange()
を実装します(配列が大きすぎない場合、配列の完全なコピーを格納して再評価を確認します)。変更が検出された場合は、ValueChanged
シグナルを発生させます)QTimer
にdetectChange()
を定期的に呼び出すように設定します。valueChanged
信号をテキストボックスのsetValue
スロットに接続します(逆も同様です)。最後に、コードはこの例のようになります。ここでは、int * ptrのコードのみです。
class Updater : public QObject
{
Q_OBJECT
public:
Updater(int *);
QTimer *timer;
int myData_mem;
int *mydata;
public slots:
void setText(const QString &value);
void detectChange();
signals:
void hasChanged(const QString &value);
};
Updater::Updater(int *mydata_) : QObject()
{
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(detectChange()));
timer->start(500);
mydata = mydata_;
myData_mem = mydata_;
}
void Updater::detectChange()
{
if (*mydata != myData_mem)
{
myData_mem = *mydata;
emit hasChanged(QString::number(myData_mem));
}
}
void Updater::setText(const QString &value)
{
myData_mem = value.toInt();
*mydata = myData_mem;
}
int shared_data;
int main(int argc, char *argv[]) {
// your main qt code goes here
// ....
// and updater setup ,now :
QLineEdit *editor = new QLineEdit("0");
Updater updater(&shared_data);
QObject::connect(editor, SIGNAL(textChanged(const QString &)),
&updater, SLOT(setText(const QString &)));
QObject::connect(&updater, SIGNAL(hasChanged(const QString &)),
editor, SLOT(setText(const QString &)));
// ....
}
あなたがやっていることのいくつかのコードを共有できますか? – Hayt