Russian Qt Forum
Март 29, 2024, 02:04
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
И снова QTableWidget...
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: И снова QTableWidget... (Прочитано 9533 раз)
Anarion
Гость
И снова QTableWidget...
«
:
Февраль 28, 2010, 00:38 »
Здравствуйте. В очередной раз пришлось работать с таблицами и возникли новые вопросы. Использую QTableWidget. Подскажите пожалуйста:
1) В свойствах QTableWidget можно установить флаг sortingEnabled, после чего можно сортировать таблицу по столбцам. Однако результат выглядит несколько странным:
Есть предположение, что сортировка производится по алфавиту. Есть ли возможность включить сортировку по значению? Сам реализовал путем записи таблицы в QList <double*> и сортирую, собственно, QList. Но время сортировки слишком великом (сравнил с Excel, тот почти мгновенно сортирует). Как вариант можно использовать лучший алгоритм, но интересно узнать, может встроена сортировка по значению.
2) Допустим, при двойном щелчке по ячейке, она (ячейка) переходит в режим редактирования. Не помню, где читал, но вроде в этот момент ячейка заменяется делегатом QLineEdit. Вопрос: можно ли получить указатель на этот виджет (QLineEdit), чтобы установить в него QDoubleValidator? По условиям работы в таблице могут быть только действительные числа (не строки и т.д.). Реализовал постпроверкой введенного значения, но валидатором, думаю, будет проще.
3) Есть ли в Qt готовая реализация методов Отменить/повторить для таблицы? Не то, чтобы я на столько ленив, что хочу использовать все готовые компоненты (для одной таблицы реализовал), но верится что умные люди, уже сделали и на много лучше.
PS: Уже не по таблицам вопрос
Подскажите пожалуйста, каким образом можно получить состояние клавиш NumLock, ScrollLock и CapsLock в момент запуска программы? Хочу сделать в status bar индикаторы, как отображать при нажатии -знаю (но это уже флаг внутри программы), а вот про получение состояния этих кнопок в Qt найти информацию не смог.
PSS: Перед тем, как задать вопросы, я честно пытался сам разобраться...
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: И снова QTableWidget...
«
Ответ #1 :
Февраль 28, 2010, 11:49 »
1. Используй связку модель -> QSortFilterProxyModel -> QTableView
2. Используй делегаты.
3. Qt's Undo Framework
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Anarion
Гость
Re: И снова QTableWidget...
«
Ответ #2 :
Февраль 28, 2010, 12:40 »
Спасибо большое. Бум разбираться...
Записан
voronElf
Гость
Re: И снова QTableWidget...
«
Ответ #3 :
Март 01, 2010, 09:24 »
насчет CapsLock, я в обработчике события пользовался QKeyEvent::nativeModifiers (). Но событие от клавиатуры нужно.
А без события как считать находил кто-нибудь ?
Записан
Anarion
Гость
Re: И снова QTableWidget...
«
Ответ #4 :
Март 10, 2010, 17:32 »
Посмотрел на примере Notepad++ индикатор NumLock, выяснилось, что он меняется при нажатии клавиши только в том случае, когда активно окно самой программы. В общем, пришел к выводу, что текущее состояние не так важно.
Разрешите обратиться с новым вопросом по таблицам, точнее уже связанным с ней косвенно (думаю, что нет смысла создавать новые темы с вопросами, ответ на которые заключается в одном посте. Если неправ, пожалуйста поправьте).
Дошел наконец-то до делегатов. Хотел поместить в ячейки таблицы QDoubleSpinBox, чтобы сразу передать максимальное и минимальное допустимые значения, да и изменять удобно (работа с числами только). Возникла проблема в следующем:
разделителем в QDoulbeSpinBox установлена "," (запятая тобишь). Причем если бы только при начальном выводе, то ладно. Но ведь при наборе числа не дает ввести "." (точку), а хотелось бы использовать именно точку в качестве разделителя, т.к. куча данных в таблицах и прочих элемента выводятся через QString::number() с точкой. Да и привычнее. Предполагаю, что связано с установками знака разделителя, установленного в свойствах операционной системе. В примере из ассистенте есть пример:
Код:
QLocale::setDefault(QLocale::C);
d = QString("1234,56").toDouble(&ok); // ok == false
d = QString("1234.56").toDouble(&ok); // ok == true, d == 1234.56
QLocale::setDefault(QLocale::German);
d = QString("1234,56").toDouble(&ok); // ok == true, d == 1234.56
d = QString("1234.56").toDouble(&ok); // ok == true, d == 1234.56
Пробовал в конструкторе формы вызвать QLocale::setDefault(QLocale::German); т.к. вроде оба разделителя понимает, но результат прежний - точку ставить не дает. В свойствах самого QDoubleSpinBox параметра, отвечающего за знак разделителя не нашел. Подскажите пожалуйста, можно ли каким-нибудь образом изменить знак разделителя?
«
Последнее редактирование: Март 10, 2010, 18:11 от Anarion
»
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: И снова QTableWidget...
«
Ответ #5 :
Декабрь 23, 2012, 19:54 »
Наткнулся случайно, когда искал
Кроме этого:
Цитата: Пантер от Февраль 28, 2010, 11:49
1. Используй связку модель -> QSortFilterProxyModel -> QTableView
2. Используй делегаты.
3. Qt's Undo Framework
Есть другое решение, для сравнения значений
Переопределяем оператор сравнения < QTableWidgetItem и радуемся
У меня была сортировка чисел:
Код:
class UIntTableWidgetItem: public QTableWidgetItem
{
protected:
virtual bool operator < (const QTableWidgetItem & other) const
{
qint32 a = text().toInt();
qint32 b = other.text().toInt();
return a < b;
}
};
Так можно и вещественные числа сортировать и даты, и т.п.
Надеюсь, кому нибудь поможет
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Day
Частый гость
Offline
Сообщений: 290
Re: И снова QTableWidget...
«
Ответ #6 :
Декабрь 09, 2017, 13:40 »
Цитировать
Надеюсь, кому нибудь поможет
Хоть и через много лет, но кому-то помогло. Спасибо!:)
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: И снова QTableWidget...
«
Ответ #7 :
Декабрь 09, 2017, 19:51 »
Цитата: Day от Декабрь 09, 2017, 13:40
Цитировать
Надеюсь, кому нибудь поможет
Хоть и через много лет, но кому-то помогло. Спасибо!:)
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Day
Частый гость
Offline
Сообщений: 290
Re: И снова QTableWidget...
«
Ответ #8 :
Декабрь 09, 2017, 21:33 »
Можно немножко лирики?
Есть места, где на мои простые вопросы отвечают просто - "смотри Доку!" Да. Дока у Кути роскошная. И если знать, где искать, все можно найти. Но не всегда знаешь, что именно надо искать. А уж когда надо специальным образом что-то соединить...
Здесь мне ни разу не сказали - "смотри..." Если кто-то знает решение моего вопроса, или хотя бы намек, мне решат или намекнут. И сам я стараюсь в меру своих слабых сил...
Спасибо вам всем!
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...