GVKun编程网logo

c – 等待在QLineEdit :: onTextChanged中输入的最后一个字符(c++ 等待输入)

14

本文将带您了解关于c–等待在QLineEdit::onTextChanged中输入的最后一个字符的新内容,同时我们还将为您解释c++等待输入的相关知识,另外,我们还将为您提供关于AndroidEdit

本文将带您了解关于c – 等待在QLineEdit :: onTextChanged中输入的最后一个字符的新内容,同时我们还将为您解释c++ 等待输入的相关知识,另外,我们还将为您提供关于Android EditText AddTextChangeListener货币格式、Android EditText和addTextChangedListener、android – EditText afterTextChanged不起作用、android – EditText TextChangeListener问题的实用信息。

本文目录一览:

c – 等待在QLineEdit :: onTextChanged中输入的最后一个字符(c++ 等待输入)

c – 等待在QLineEdit :: onTextChanged中输入的最后一个字符(c++ 等待输入)

我正在开发销售点应用程序,我有一个函数从QLineEdit(产品的条形码)获取文本并运行查询以查找要显示的产品.问题是我每次文本更改时都会运行查询,也就是说,每次输入新字符时都会运行查询.有没有办法等待用户停止输入然后运行查询?我将使用手持式扫描仪,因此在键入的每个字符之间会有100毫秒.

我想我需要这样的东西:

void PoS::on_lineEdit_textEdited()
{
    //check for keys still being pressed
    //if 100ms have passed without any key press,run query
}

我曾尝试使用计时器和线程(我对Qt 5很新)但到目前为止都失败了.

解决方法

你需要一个计时器.在此处阅读有关QTimer的更多信息: http://qt-project.org/doc/qt-5.1/qtcore/qtimer.html

添加QTimer * mTimer作为私有成员变量.创建一个名为do_query的插槽,您将在其中执行查询.把它放在构造函数中:

mTimer = new QTimer(this); // make a QTimer
mTimer->setSingleShot(true); // it will fire once after it was started
connect(mTimer,&QTimer::timeout,this,&PoS::do_query); // connect it to your slot

现在你的功能:

void PoS::on_lineEdit_textEdited()
{
    mTimer->start(100); // This will fire do_query after 100msec. 
    // If user would enter something before it fires,the timer restarts
}

并做你的查询:

void PoS::do_query()
{
    // your code goes here
}

Android EditText AddTextChangeListener货币格式

Android EditText AddTextChangeListener货币格式

通过SO,我将以下EditText addTextChangedListener事件处理程序放到一起,除了我需要进行一些改进外,它可以正常工作.当我键入内容时,它会从右到左填充数字.我希望它从左到右填充.现在,如果我输入50,它的格式为$0.50,当我输入50时,我希望它的格式为$50.00

下面是xml声明和Java代码,请有人可以指出我需要进行更改以获得所需结果的地方.

XML声明

    <EditText
        android:id="@+id/valueEditText"
        android:layout_row="1"
        android:hint="@string/hint_value_to_add"
        android:imeOptions="actionNext"
        android:inputType="numberDecimal"/>
    <requestFocus />

Java代码

      inputValue = (EditText) findViewById(R.id.valueEditText);
        inputValue.addTextChangedListener(new TextWatcher() {
            private String current = "";
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
                // Todo Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (!s.toString().equals(current)) {
                    inputValue.removeTextChangedListener(this);

                    String replaceable = String.format("[%s,.\\s]", NumberFormat.getCurrencyInstance().getCurrency().getSymbol());
                    String cleanString = s.toString().replaceAll(replaceable, "");

                    double parsed;
                    try {
                        parsed = Double.parseDouble(cleanString);
                    } catch (NumberFormatException e) {
                        parsed = 0.00;
                    }
                    String formatted = NumberFormat.getCurrencyInstance().format((parsed/100));

                    current = formatted;
                    inputValue.setText(formatted);
                    inputValue.setSelection(formatted.length());
                    inputValue.addTextChangedListener(this);
                }
            }
        });

解决方法:

每一个这样的问题Format EditText to currency with whole numbers我像这样将setMaximumFractionDigits添加到0

@Override
    public void afterTextChanged(Editable s) {
        if (!s.toString().equals(current)) {
            inputValue.removeTextChangedListener(this);

        String replaceable = String.format("[%s,.\\s]",   NumberFormat.getCurrencyInstance().getCurrency().getSymbol());
        String cleanString = s.toString().replaceAll(replaceable, "");

        double parsed;
        try {
            parsed = Double.parseDouble(cleanString);
        } catch (NumberFormatException e) {
            parsed = 0.00;
        }
        NumberFormat formatter = NumberFormat.getCurrencyInstance();
        formatter.setMaximumFractionDigits(0);
        String formatted = formatter.format((parsed));

        current = formatted;
        inputValue.setText(formatted);
        inputValue.setSelection(formatted.length());
        inputValue.addTextChangedListener(this);
    }

Android EditText和addTextChangedListener

Android EditText和addTextChangedListener

我目前正在将数据库管理器移植到 android,并且由于我喜欢的性能原因
仅更新已修改的属性.我试图用addTextChangedListener来做这个,以便将修改后的entrys添加到List,但我的程序从不进入任何方法.
EditText Et = (EditText) Editors.get(Prop.Name);
Et.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
        // Todo Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence s,int start,int count,int after) {
        // Todo Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence s,int before,int count) {
        // Todo Auto-generated method stub
        if(Prop.GetType() == Property.PROPTYPE.num) {
            float f = Float.parseFloat(s.toString());
            Prop.FromString(f);
        }
        else {
            Prop.FromString(s.toString());
        }
        propertiesToUpdate.add(Prop);
});
Et.setText(Prop.ToString());

解决方法

为什么以这种方式获取EditText实例.这是你的活动布局的一部分,所以你应该得到这样的东西
EditText Et = (EditText) findViewById(R.id.your_id);

我认为问题在于您持有对不属于您的Activity布局的EditText的引用,因此您将侦听器附加到错误的视图.

android – EditText afterTextChanged不起作用

android – EditText afterTextChanged不起作用

我使用下面的代码将Uri图像插入到sqlite中:

寄存器

private void insertData( String name,String pass,Uri image) throws sqliteException {
        database = mdb.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(MyDatabaseHelper.KEY_NAME,name);
        cv.put(MyDatabaseHelper.KEY_PASSWORD,pass);
        try {
            database = mdb.getWritableDatabase();
            InputStream iStream = getContentResolver().openInputStream(image);
            byte[] inputData = Utils.getBytes(iStream);
            cv.put(MyDatabaseHelper.KEY_IMAGE,inputData);
        }catch(IOException ioe)
        {
            Log.e(TAG,"<saveImageInDB> Error : " + ioe.getLocalizedMessage());
        }
        database.insert(MyDatabaseHelper.TABLE_USER,null,cv);
        Toast.makeText(getApplicationContext(),"Database Created",Toast.LENGTH_SHORT).show();
        database.close();
    }

当我获得Database Created时,我假设数据库已成功创建并插入了数据.

在Login中,我想要根据用户名从sqlite中检索图像.

name = (EditText) findViewById(R.id.name);

name.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s,int start,int before,int count) {
    }

    @Override
    public void beforeTextChanged(CharSequence s,int count,int after) {
    }

     @Override
    public void afterTextChanged(Editable editable) {
        String personName = name.getText().toString();
        database = mdb.getWritableDatabase();
        String selectQuery = " SELECT " + MyDatabaseHelper.KEY_IMAGE + " FROM " + MyDatabaseHelper.TABLE_USER + " WHERE " + MyDatabaseHelper.KEY_NAME + " = ' " + personName + " ' ";
        Cursor cursor = database.rawQuery(selectQuery,null);
        if (cursor.movetoFirst()) {
            byte[] blob = cursor.getBlob(cursor.getColumnIndex("Image"));
            Log.e("A",blob+"");
            cursor.close();
            mdb.close();
            imageView.setimageBitmap(getRoundedBitmap(Utils.getimage(blob)));
        }
        else
        {
            Toast.makeText(getApplication(),"NULL",Toast.LENGTH_SHORT).show();
        }
    }
});

    public Bitmap getRoundedBitmap(Bitmap bitmap){
    Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888);
    BitmapShader shader = new BitmapShader(bitmap,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);
    Paint paint = new Paint();
    paint.setShader(shader);
    paint.setAntiAlias(true);
    Canvas c = new Canvas(circleBitmap);
    c.drawCircle(bitmap.getWidth() / 2,bitmap.getHeight() / 2,bitmap.getWidth() / 2,paint);
    return circleBitmap;
   }

MyDatabaseHelper

public class MyDatabaseHelper extends sqliteOpenHelper {
    public static final int DATABASE_VERSION=1;
    public static final String DATABASE_NAME="mm.db";
    public static final String TABLE_USER="User";
    public static final String KEY_NAME="Name";
    public static final String KEY_PASSWORD="Password";
    public static final String KEY_IMAGE="Image";
    public static final String ID="id";

    public void onCreate(sqliteDatabase db) {
        db.execsql("create table " + TABLE_USER + " ( " + ID + " INTEGER PRIMARY KEY,Name TEXT,Password TEXT,Image BLOB )");
    }

    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
        Log.w(MyDatabaseHelper.class.getName(),"Upgrading database from version" + oldVersion + "to" + newVersion + ",which will destroy all old data");
        db.execsql("Drop TABLE IF EXISTS " + TABLE_USER);
        onCreate(db);
    }

    public MyDatabaseHelper(Context context)
    {
        super(context,DATABASE_NAME,1);
    }
}

utils的

public class Utils {

    public static byte[] getimageBytes(Bitmap bitmap) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
        return stream.toByteArray();
    }

    public static Bitmap getimage(byte[] image) {
        return BitmapFactory.decodeByteArray(image,image.length);
    }

    public static byte[] getBytes(InputStream inputStream) throws IOException {
        ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];

        int len = 0;
        while ((len = inputStream.read(buffer)) != -1) {
            byteBuffer.write(buffer,len);
        }
        return byteBuffer.toByteArray();
    }
}

用户在EditText上键入他/她的名字,名称为name,图片没有检索,但是向我显示Null消息!这有什么不对?

解决方法

对于EditText,每当TextWatcher()检测到文本更改时,将调用afterTextChanged(),即EditText中键入的每个字符都是textChange事件.

因此,即使在输入整个用户名之前,也会多次调用afterTextChanged(),从而调用null游标.但是,只要用户名被完全输入,光标就应该提供正确的行,在您的情况下,是图像blob.

正如您所提到的,它是一个登录页面,因此必须有一个密码editText以及用户名editText.

我建议更好的方法是使用setonFocuschangelistener()检测用户名EditText的焦点更改.用户完成输入用户名后立即触发SQL查询,焦点现在是密码editText.

name = (EditText) findViewById(R.id.name);

name.setonFocuschangelistener(new OnFocuschangelistener() {          
    public void onFocusChange(View v,boolean hasFocus) {
        if(!hasFocus) {               //Fire Query when focus is lost
            String personName = name.getText().toString();
            database = mdb.getWritableDatabase();
            String selectQuery = " SELECT " + MyDatabaseHelper.KEY_IMAGE + " FROM " + MyDatabaseHelper.TABLE_USER + " WHERE " + MyDatabaseHelper.KEY_NAME + " = ' " + personName + " ' ";
            Cursor cursor = database.rawQuery(selectQuery,null);
            if (cursor.movetoFirst()) {
                byte[] blob = cursor.getBlob(cursor.getColumnIndex("Image"));
                Log.e("A",blob+"");
                cursor.close();
                mdb.close();
                imageView.setimageBitmap(getRoundedBitmap(Utils.getimage(blob)));
            }
            else
            {
                Toast.makeText(getApplication(),Toast.LENGTH_SHORT).show();
            }
        }
});

如果有效,请告诉我们.

android – EditText TextChangeListener问题

android – EditText TextChangeListener问题

我有一个用于搜索目的的编辑文本.我已经添加了

searchET.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // Todo Auto-generated method stub              
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // Todo Auto-generated method stub              
            }

            @Override
            public void afterTextChanged(Editable s) {
                // Todo Auto-generated method stub
                //intent to another page where i show my search result
            }
        });

问题是:
当我为例如:“fort”提供搜索字符串时,我会在下一页中获得所需的结果.但是当我按下后退按钮时,它不会在第一次点击时移动到上一页.我将不得不按回按钮4次以转到上一页.这是因为我的搜索字符串长度为4,每次在edittext中输入值时,都会调用textchangelistener.我该如何解决这个问题?请回复.提前致谢.

解决方法:

根据您的需要,您可以根据某些条件转到下一页.例如,启动计时器,如果在计时器到期之前调用afterTextChanged,则重置计时器.或者,您可以使用“搜索”按钮,用户明确表示他已完成输入单词.

如果您可以共享所需的行为,则可以建议更好的替代方案.

我们今天的关于c – 等待在QLineEdit :: onTextChanged中输入的最后一个字符c++ 等待输入的分享就到这里,谢谢您的阅读,如果想了解更多关于Android EditText AddTextChangeListener货币格式、Android EditText和addTextChangedListener、android – EditText afterTextChanged不起作用、android – EditText TextChangeListener问题的相关信息,可以在本站进行搜索。

本文标签: