Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
2.1.2012, 20:28 | QFileSystemModel | Цитата
Устанавливайте сначала модель, а затем уже индекс
если хотите чтобы пользователь был только в этой папке то используйте
|
ruzik, | ||
31.12.2011, 21:29 | Неправильное отображение делегата | Цитата
QWidget * parent вам передали чтобы вы могли установить родителя. Так что используйте:
|
ruzik, | ||
29.12.2011, 15:33 | Как сохранить Qt::AlignLeft для QLineEdit при уменьшении его размера при сдвиге сплиттера? | Используйте следующий метод:
|
Steklova Olga, | ||
28.12.2011, 21:22 | Попиксельное заполнение буфера | Можете попробовать: void glPixelZoom( GLfloat xfactor, GLfloat yfactor); void glScaled( GLdouble x, GLdouble y, GLdouble z); можете использовать также scaled от QImage: создаете изображение передав указатель на буффер QImage ( const uchar * data, int width, int height, Format format ) масштабируете QImage scaled ( const QSize & size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation ) const переводите в формат GL QImage QGLWidget::convertToGLFormat ( const QImage & img ) [static] рисуете передавая вместо GLvoid * data QImage::uchar * bits (); void glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * data); |
loh, | ||
28.12.2011, 20:36 | Как сохранить Qt::AlignLeft для QLineEdit при уменьшении его размера при сдвиге сплиттера? | На самом деле при изменении размеров QLineEdit думает так: У меня есть текст. Он имеет определенную длину. С текстом связана позиция курсора. Курсор стоит там где его оставил пользователь. (или где он установился когда вы добавили текст) При уменьшении я буду стараться отображать ту позицию где установлен курсор, раз он там стоит, то значит это отображение приоритетнее для пользователя. Для исправления этого просто после каждого изменения текста устанавливайте курсор на нулевую позицию void QLineEdit::setCursorPosition ( int ) |
Steklova Olga, | ||
27.12.2011, 18:10 | HexSpinBox из примера в книге Бланшет | Если необходима тотальная изоляция неправильных вводимых данных пользователя и известен диапазон, то применяйте если это возможно QSlider. Для него достаточно использование мыши, а пользователи не любят возиться то с мышью, то с клавиатурой для ввода данных. И процесс намного нагляднее. |
Steklova Olga, | ||
27.12.2011, 2:33 | Попиксельное заполнение буфера | QPainter при выводе обязательно переводит QImage в QPixmap. Это очень расточительно. Используйте вариант с QGLWidget и функцией glDrawPixels. Это легко и эффективно. Хотя при работе c QGLWidget , QPainter уже будет использовать рендерный движок OpenGL. |
loh, | ||
26.12.2011, 19:56 | HexSpinBox из примера в книге Бланшет | Цитата PS Получается, что в книге Бланшет фраза на стр. 106 ошибочна? ("Теоретически следует возвращать Invalid или Intermediate для значений, лежащих вне диапазона наборного счетчика, но QSpinBox достаточно "умен" и может самостоятельно отследить эту ситуацию.") Мариус Бугге, Пол Олав и Жасмин Бланшет ошиблись? А мы нет? Это что то нереальное. Конено же нет. Пример Жасмин работает так как надо. Работает отлично. Ее предложение которое вы привели тоже истина. И ее решение намного лучше, чем которое предложила я. Если вы хорошенько присмотритесь к ее примеру и тому что у вас получилось, сразу станет ясно где хороший код, а где мусор. Итак. В своем примере Жасмин исходит из следующих соображений: 1) Стрелки никогда не выведут значение за диапазон. 2) Пусть пользователь вводит все что угодно, однако после того как элемент потеряет фокус QSpinBox все равно установит реальное значение из диапазона. Например: если вы введете число выходящее за диапазон (а пример Жасмин позволяет это сделать), затем элемент потеряет фокус, и вы увидите что в элементе стоит максимальное значение диапазона. QSpinBox непременно проверит его и поставит верное значение. Но это случится после потери фокуса. Вам же этого не хотелось. Вам хотелось чтобы пользователь просто не мог вводить и все. Теперь посмотрите на ваш пример. Вроде бы все чудесно работает. Однако... Допустим диапазон (10,255). Пользователь хочет ввести значение 0x90. Такое значение допустимо. судя по диапазону. Но что делает элемент при этом? Он не пускает стереть букву A, которое представляет собой минимальное значение диапазона и стирать его функция validate не даст. Почему? Ведь пользователь хочет ввести вполне разрешенное число 0x90. Таким образом получается что первая цифра должна быть больше A. Очень большие сложности при вводе не правда ли? А некоторые разрешенные значения кроме как копировать-вставить или нажатиями на стрелочки и не введешь. Теперь я думаю понятно почему Жасмин не делает проверку при вводе. Она оставляет это все на рассмотрение QSpinBox по завршению ввода. И я думаю это лучший вариант. Таким образом ошибается не Жасмин. А мы. И ошибаемся серьезно. |
Steklova Olga, | ||
26.12.2011, 16:25 | HexSpinBox из примера в книге Бланшет | Цитата НО, если в setRange указать ненулевое min значение, то программа тут же сломается!!! Что с этим делать? Пожалуйста не используйте setRange в конструкторе. Используйте эту функцию сразу после создания объекта. Как делаете обычно для QSpinBox. Я использовала ее в конструкторе потому что введенное по умолчанию значение через setRange проходит проверку в любом случае. Цитата А можно еще сделать так, чтобы юзеру было разрешено в строке вводить 'a'...'f', но они бы сразу отображались в верхнем регистре? При входе в QValidator::State HexSpinBox::validate(QString &text, int &pos) используйте пожалуйста: text=text.toUpper(); |
Steklova Olga, | ||
25.12.2011, 1:52 | Попиксельное заполнение буфера | QImage предоставляет аппаратно-независимый подход к изображению. Особенно сильно это будет проявляться когда графическая система будет отличаться от привычных. Например через QImage можно работать с directFB. QPainter используется для рисования. Он должен на чем-то рисовать. Другой возможности рисовать не существует. Обязательно QPainter требует QPaintDevice. Вот устройства для рисования: QCustomRasterPaintDevice, QGLFramebufferObject, QGLPixelBuffer, QImage, QPicture, QPixmap, QPrinter, QSvgGenerator, QWidget. Выбирай и рисуй. Или создавай свой потомок QPaintDevice и определяй собственный QPaintEngine. Если так важна производительность и не важна аппаратная зависимость, то QGLPixelBuffer лучший выбор. Он использует полное аппаратное ускорение. Рисует в памяти. Затем можешь рендерить прямо в QImage. Qt содержит пример использования QGLPixelBuffer - Pixel Buffers Example |
loh, | ||
23.12.2011, 22:06 | HexSpinBox из примера в книге Бланшет | Не совсем понятно что вам нужно. Пользователю позволяется вводить данные, которые поддерживает QRegExpValidator. Если вам нужен диапазон [0..FFFFFF] просто замените: 1) setRange(0x0, 0xFFFFFF); 2) QRegExp ("[0-9A-Fa-f]{1,6}") Стрелочки анализируют состояние членов-данных (minimum, maximum) установленных через setRange. Обычный ввод не контролируется этими членами-данными, после того как вы переопределили функцию validate. Вся ответственность на проверку при вводе ложится на вашу функцию. Если есть необходимость использовать параметры (minimum,maximum), то используйте следующий код:
Если существует тесная связь с функцией validate родителя и хотите использовать именно ее для проверки, то можете использовать следующий код
Именно для вашего случая считаю наилучшим выбор с изменениями setRange и QRegExp описанный в самом начале. |
Steklova Olga, | ||
12.12.2011, 14:35 | setindexwidget у QTableView | Вам нужно переопределить стандартный делегат который используется для прорисовки. 1) Наследуете QStyledItemDelegate. 2) Переопределяете его методы createEditor, paint, setEditorData, setModelData, sizeHint, updateEditorGeometry 3) Устанавливаете делегат для нужного столбца или строки. Если необходимо отображение делегата только для специальных типов в ячейках используете QItemEditorFactory и QEditorCreaterBase. |
bikineev, | ||
11.12.2011, 17:43 | Режим поплавка у окна |
|
ruzik, | ||
11.12.2011, 16:57 | Режим поплавка у окна |
Informs the window system that the window should stay on top of all other windows. Note that on some window managers on X11 you also have to pass Qt::X11BypassWindowManagerHint for this flag to work correctly.
Constructs a widget which is a child of parent, with widget flags set to f. The widget flags argument, f, is normally 0, but it can be set to customize the frame of a window (i.e. parent must be 0). To customize the frame, use a value composed from the bitwise OR of any of the window flags. Note that the X11 version of Qt may not be able to deliver all combinations of style flags on all systems. This is because on X11, Qt can only ask the window manager, and the window manager can override the application's settings. On Windows, Qt can set whatever flags you want.
|
ruzik, | ||
26.11.2011, 12:34 | Мультимедиа клавиши | Вот пример для операционной системы Windows: http://www.codeproject.com/KB/DLL/keyboardhook.aspx Для системы XWindow придется использовать функции из XLib. Например XGrabKey http://tronche.com/gui/x/xlib/input/XGrabKey.html |
urandom, | ||
26.11.2011, 0:07 | Мультимедиа клавиши | Qt::Key_MediaPlay 0x01000080 Qt::Key_MediaStop 0x01000081 Qt::Key_MediaPrevious 0x01000082 Qt::Key_MediaNext 0x01000083 Qt::Key_MediaRecord 0x01000084 Qt::Key_MediaPause 0x1000085 Qt::Key_MediaTogglePlayPause 0x1000086 Также : "Key events for multimedia keys are ignored by default. You should call accept() if your widget handles those events." Для глобального отлавливания событий нажатия клавиш клавиатуры, придется использовать глобальные ловушки. Для каждой операционной системы делается это различными способами. Кросплатформенной реализации в Qt для таких методов нет. Другое дело если предполагается использование вашей программы в операционной системе без потери фокуса. Тогда отлавливание глобальных событий нажатия клавиш сводится к отлавливанию их на локальном (в очередях событий вашей программы) уровне. Для упрощения создания кросплатформенности вы можете перенести процедуры создания глобальных ловушек в отдельные библиотеки. Глобальные ловушки дадут вам возможность использовать возможности системы по определению медиа клавиш на клавиатуре. Это значит что вы сможете обрабатывать эти клавиши, даже тогда, когда возможностей по определению их с помощью констант Qt будет недостаточно. |
urandom, | ||
24.11.2011, 16:22 | Ошибка в разделе помощи | http://www.forum.crossplatform.ru/index.php?&act=Help неправильно написано слово : "помоШник". <tr><td class="row1"><a href="http://www.forum.crossplatform.ru/index.php?act=Help&CODE=01&HID=13"> <b>Помошник</b></a><br>Полное пояснение к этой небольшой, но очень удобной функции</td></tr> ____________________________________________________________________________ Также тут http://www.forum.crossplatform.ru/index.ph...E=01&HID=13 "Функцию 'Помошник' можно вызвать, нажав на соответствующую ссылку в заголовке форума. Этот инструмент предлагает ссылки на многие важные страницы форума, а также позволяет получить быстрый доступ к распространенным функциям." и тд. ____________________________________________________________________________ А также в самом заголовке: <div class="maintitle"><img src="style_images/cozy_green/nav_m.gif" border="0" alt=">" width="8" height="8"> Помошник</div> |
ViGOur, | ||
24.11.2011, 15:21 | Возможно ли использовать TableModel в ListView? | Ну тут сразу 4 решения: 1) Наследуете QTableView переопределяете paintEvent. Для возможности редактирования можете изменить еще некоторые методы, либо заменить стандартный делегат. 2) Создаете собственный делегат для прорисовки элементов в QListView. 3) Если стоит вопрос только изменения внешнего вида, то простейшее решение использовать собственный StyleSheet для QTableView. 4) Наследуете QAbstractItemModel. Создаете собственную модель, в которой ваши данные в нескольких ячейках собираете в одну, и выдаете для прорисовки стандартному делегату класса QListView. 4-ый метод конечно противоречит самой MVC, но в пройстеших нуждах можно и его использовать. Я бы использовал 2 метод если нужна гибкая система с возможностью корректного изменения данных. Имея QModelIndex для текущей строки можно пройтись по столбцам QAbstractTableModel, сгруппировать их необходимым образом и нарисовать. Если нет нужны непосредственного изменения данных через представление, то конечно же мой вариант 3. |
Strikevld, | ||
Текстовая версия | Сейчас: 23.11.2024, 4:14 |