crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Как мне создать маску для числового поля?
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  


Цитата(mva @ 14.9.2009, 9:11) *
Можно конечно и так, но хотелось бы, чтобы маска настраивалась автоматически для каждого числового поля исходя из формата данных в самой БД. Ведь отображает-то 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  


Цитата(Litkevich Yuriy @ 14.9.2009, 10:08) *
mva, попробуй подключится к БД с помощью демки sqlbrowser, в ней по щелчку правой кнопкой мыши по имени таблицы, в котекстном меню можно выбрать "схему", и в табличном представлении отобразятся свойства полей, в частности тип данных Qt, который используется для каждого поля. Это может помочь разобратся с проблемой.


Для моих полей я получаю ту же информацию, что и с помощью QSqlField.type(), а именно: поля имеют тип double, precision = -1. Как извлечь из этого маску - непонятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 14.9.2009, 13:14
Сообщение #8


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Маску не извлекают, а вычисляют...

приблизительно так:
//==============================================================================
// вычислитьМаску( псЦел, псДробн) © trdm 2009
Функция вычислитьМаску( псЦел, псДробн)
    ЗначВозврата = "";
    
    СЦ = 0;
    Для СЦ = 1 По псЦел Цикл
        ЗначВозврата = ЗначВозврата + "9";
    КонецЦикла;
    Если псДробн > 0 Тогда
        ЗначВозврата = ЗначВозврата + ",";
        Для СЦ = 1 По псДробн Цикл
            ЗначВозврата = ЗначВозврата + "9";
        КонецЦикла;
    КонецЕсли;     
    
    Возврат ЗначВозврата;
КонецФункции // вычислитьМаску()

это если там нумерик.
Для других типов тот же метод.

Сообщение отредактировал trdm - 14.9.2009, 13:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mva
  опции профиля:
сообщение 14.9.2009, 15:04
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 104
Регистрация: 15.3.2009
Из: Киров
Пользователь №: 615

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(trdm @ 14.9.2009, 14:14) *
Маску не извлекают, а вычисляют...


Если бы я знал, где взять "псЦел" и "псДробн" для данного поля в Qt4 то я бы вычислил.


Цитата(abra @ 14.9.2009, 12:23) *
P.S так же можешь попробовать сделать так же,как делает Постгря.Получать типы полей(по запросу.У тебя выведутся все поля,примерно в таком в форме скажем 5,2;3,1; ну короче нумерики),и ты тогда автоматом ставишь запятую там,где это надо.Получаешь первый символ,отступаешь в поле данное кол-во символов,ставишь запятую(отделение целой от дробной).
Затем складываешь два числа(целой и дробной части,и +1(запятая),и получаешь размерность поля.
setLength(и устанавливаешь).
И вот твоя маска готова.Алгоритм один,а использовать можно для всех полей...


Не совсем понял. А если записей в таблице нет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 14.9.2009, 15:15
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(mva @ 14.9.2009, 16:04) *
Не совсем понял. А если записей в таблице нет?

Я тебя правильно понимаю? Тебе нужно на лету генерировать маску для поля ввода по:
- типу вводимых значений (int, float, char)
- если это float то и по точности числа: 2,3...n разрядов после запятой
- если данных в столбце нет, то только по типу
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 13.1.2025, 23:49