Как мне создать маску для числового поля? |
Здравствуйте, гость ( Вход | Регистрация )
Как мне создать маску для числового поля? |
mva |
13.9.2009, 16:42
Сообщение
#1
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Доброго времени суток всем! Поздравляю всех с Днем Программиста!
В моей БД на PostgreSQL в некоторых таблицах есть числовые поля типа NUMERIC(10, 3). Ну или NUMERIC(12, 2), например. При использовании QTableView они нормально отображаются, с тремя или двумя знаками после запятой. Но при редактировании этих полей не работает маска ввода, т.е. в поле можно вводить все что угодно. Хотелось бы, чтобы пользователь сразу видел маску ввода чисел. Проблема в том, что я не знаю, где эту маску можно получить. Фунция QSqlField::precision(), на которую я рассчитывал, возвращает -1. Кто-нибудь может помочь? |
|
|
abra |
13.9.2009, 21:16
Сообщение
#2
|
Студент Группа: Участник Сообщений: 68 Регистрация: 12.1.2009 Пользователь №: 485 Спасибо сказали: 11 раз(а) Репутация: 2 |
Укажи
9999999999,999 в inputMask |
|
|
mva |
14.9.2009, 8:11
Сообщение
#3
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Можно конечно и так, но хотелось бы, чтобы маска настраивалась автоматически для каждого числового поля исходя из формата данных в самой БД. Ведь отображает-то QTableView поля правильно, значит информация о формате извлекается из БД. Только вот почему эта информация не используется при редактировании?
|
|
|
Litkevich Yuriy |
14.9.2009, 9:08
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
mva, попробуй подключится к БД с помощью демки sqlbrowser, в ней по щелчку правой кнопкой мыши по имени таблицы, в котекстном меню можно выбрать "схему", и в табличном представлении отобразятся свойства полей, в частности тип данных Qt, который используется для каждого поля. Это может помочь разобратся с проблемой.
У меня подобная проблема была с Firebird. И через QODBC, как оказалось, более удачное представление данных чем QIBase, но только в Qt 4.4.3 |
|
|
abra |
14.9.2009, 10:24
Сообщение
#5
|
Студент Группа: Участник Сообщений: 68 Регистрация: 12.1.2009 Пользователь №: 485 Спасибо сказали: 11 раз(а) Репутация: 2 |
Можно конечно и так, но хотелось бы, чтобы маска настраивалась автоматически для каждого числового поля исходя из формата данных в самой БД. Ведь отображает-то QTableView поля правильно, значит информация о формате извлекается из БД. Только вот почему эта информация не используется при редактировании? Всмысле...не понял тебя. У тебя есть таблица в Постгре,в ней поля определенного типа. Когда ты отображаешь данные в QTableView,они отображаются правильно,потому что данные берутся из таблицы.Тебе не нужно думать о преобразовании типов. Ты данные где вводишь для редактирования?В самом QTableView? или у тебя есть определенные объекты для редактирования. текстовые,листвиевы и так далее.Если да,то вот в них и выстави в inputMask маски. Сообщение отредактировал abra - 14.9.2009, 10:31 |
|
|
abra |
14.9.2009, 11:23
Сообщение
#6
|
Студент Группа: Участник Сообщений: 68 Регистрация: 12.1.2009 Пользователь №: 485 Спасибо сказали: 11 раз(а) Репутация: 2 |
P.S так же можешь попробовать сделать так же,как делает Постгря.Получать типы полей(по запросу.У тебя выведутся все поля,примерно в таком в форме скажем 5,2;3,1; ну короче нумерики),и ты тогда автоматом ставишь запятую там,где это надо.Получаешь первый символ,отступаешь в поле данное кол-во символов,ставишь запятую(отделение целой от дробной).
Затем складываешь два числа(целой и дробной части,и +1(запятая),и получаешь размерность поля. setLength(и устанавливаешь). И вот твоя маска готова.Алгоритм один,а использовать можно для всех полей... |
|
|
mva |
14.9.2009, 13:09
Сообщение
#7
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
mva, попробуй подключится к БД с помощью демки sqlbrowser, в ней по щелчку правой кнопкой мыши по имени таблицы, в котекстном меню можно выбрать "схему", и в табличном представлении отобразятся свойства полей, в частности тип данных Qt, который используется для каждого поля. Это может помочь разобратся с проблемой. Для моих полей я получаю ту же информацию, что и с помощью QSqlField.type(), а именно: поля имеют тип double, precision = -1. Как извлечь из этого маску - непонятно. |
|
|
trdm |
14.9.2009, 13:14
Сообщение
#8
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
Маску не извлекают, а вычисляют...
приблизительно так:
это если там нумерик. Для других типов тот же метод. Сообщение отредактировал trdm - 14.9.2009, 13:16 |
|
|
mva |
14.9.2009, 15:04
Сообщение
#9
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Маску не извлекают, а вычисляют... Если бы я знал, где взять "псЦел" и "псДробн" для данного поля в Qt4 то я бы вычислил. P.S так же можешь попробовать сделать так же,как делает Постгря.Получать типы полей(по запросу.У тебя выведутся все поля,примерно в таком в форме скажем 5,2;3,1; ну короче нумерики),и ты тогда автоматом ставишь запятую там,где это надо.Получаешь первый символ,отступаешь в поле данное кол-во символов,ставишь запятую(отделение целой от дробной). Затем складываешь два числа(целой и дробной части,и +1(запятая),и получаешь размерность поля. setLength(и устанавливаешь). И вот твоя маска готова.Алгоритм один,а использовать можно для всех полей... Не совсем понял. А если записей в таблице нет? |
|
|
SABROG |
14.9.2009, 15:15
Сообщение
#10
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Не совсем понял. А если записей в таблице нет? Я тебя правильно понимаю? Тебе нужно на лету генерировать маску для поля ввода по: - типу вводимых значений (int, float, char) - если это float то и по точности числа: 2,3...n разрядов после запятой - если данных в столбце нет, то только по типу |
|
|
Текстовая версия | Сейчас: 13.1.2025, 23:49 |