Russian Qt Forum
Май 13, 2024, 10:39
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
календарь и не только
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: календарь и не только (Прочитано 4927 раз)
sv219
Гость
календарь и не только
«
:
Ноябрь 30, 2005, 15:12 »
неуобходимо было сделать календарь, нашел его пример в хелпе, собрал скомпилил, работает отлично, только надо одно реализовать это выбор нужной даты. Сами числа пишуться в QTextTable, так вот как по клику мышки мне получить значение???
Записан
zlatko
Гость
календарь и не только
«
Ответ #1 :
Ноябрь 30, 2005, 16:45 »
попробуй заюзать eventFilter
Записан
sv219
Гость
календарь и не только
«
Ответ #2 :
Декабрь 01, 2005, 06:15 »
а можно поподробней и желательно с примером, а то я в qt еще и не писал толком, заранее благодарен
Записан
Zmey
Гость
календарь и не только
«
Ответ #3 :
Декабрь 01, 2005, 10:07 »
Цитата: "sv219"
а можно поподробней и желательно с примером, а то я в qt еще и не писал толком, заранее благодарен
Если "не писал толком", может попробуешь почитать Ассистант? Например, начни с изучения QTextTable.
Записан
sv219
Гость
календарь и не только
«
Ответ #4 :
Декабрь 01, 2005, 10:24 »
у меня ща не понятка
зарегил фильтр событий на QTextTable
table->installEventFilter(this);
затем сделал
bool mainWindow::eventFilter(QObject *target, QEvent *event)
{
if (target == table)
{
if (event->type() == QEvent::MouseButtonPress)
{
QMessageBox::information("test", "test");
}
}
}
компилиться, но событие не срабатывает, если же проделать такое же например с кнопкой то все работает, подскажите что не так?
Записан
crocus
Гость
календарь и не только
«
Ответ #5 :
Декабрь 01, 2005, 12:13 »
calendar.cpp
#include <QtGui>
#include "calendar.h"
PopupCalendar::PopupCalendar(const QDate &day, QWidget *parent)
: QDialog(parent), today(day), original(day)
{
smallFont = font();
if (smallFont.pointSize() >= 10)
{
smallFont.setPointSize(smallFont.pointSize() - 2);
smallFont.setBold(true);
}
/*setFixedSize(sizeHint());*/
setFocusPolicy(Qt::StrongFocus);
}
QSize PopupCalendar::sizeHint() const
{
QFontMetrics fm(smallFont);
return QSize(COLS * fm.width(tr("Wed")), (ROWS + 2) * fm.height() * 1.2);
}
QDate PopupCalendar::getDate(QWidget *parent, const QDate &day, QPoint pos)
{
PopupCalendar *calendar = new PopupCalendar();
calendar->exec();
QDate date = calendar->day();
delete calendar;
return date;
}
void PopupCalendar::setDay(const QDate &day)
{
today = day;
update();
emit newDay(today);
}
void PopupCalendar::mousePressEvent(QMouseEvent *event)
{
QDate day = today;
int dayh2 = (height() / (ROWS + 2)) * 2;
if (event->y() < dayh2)
{
if (event->x() < width() / 2)
day = day.addMonths(-1);
else
day = day.addMonths(1);
}
else
{
day = QDate(today.year(), today.month(), 1);
int xday = event->x() / (width() / COLS);
int yday = (event->y() - dayh2) / ((height() - dayh2) / ROWS);
day = day.addDays(xday + COLS * yday);
}
if (day != today)
setDay(day);
}
void PopupCalendar::keyPressEvent(QKeyEvent *event)
{
int days = 0;
switch (event->key())
{
case Qt::Key_Left:
days = -1;
break;
case Qt::Key_Right:
days = 1;
break;
case Qt::Key_Up:
days = -COLS;
break;
case Qt::Key_Down:
days = COLS;
break;
case Qt::Key_PageUp:
days = today.daysTo(today.addMonths(-1));
break;
case Qt::Key_PageDown:
days = today.daysTo(today.addMonths(1));
break;
case Qt::Key_Home:
days = today.daysTo(today.addYears(-1));
break;
case Qt::Key_End:
days = today.daysTo(today.addYears(1));
break;
case Qt::Key_Escape:
today = original;
accept();
break;
case Qt::Key_Space: // fallthrough
case Qt::Key_Enter: // fallthrough
case Qt::Key_Return:
accept();
return;
default:
QDialog::keyPressEvent(event);
return;
}
QDate day = today.addDays(days);
if (day != today)
setDay(day);
}
void PopupCalendar::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setClipRegion(event->region());
painter.setFont(smallFont);
int w = width();
int h = height();
int dayh = h / (ROWS + 2);
int dayw = w / COLS;
QRect rect;
painter.drawText(1, 1, w - 1, dayh - 1, Qt::AlignHCenter,
today.toString("<< yyyy MMMM >>"), &rect);
int y = dayh;
QDate day(today.year(), today.month(), 1);
int i;
for (i = 0; i < COLS; ++i)
{
painter.drawText(dayw * i + 1, y, dayw, dayh - 1,
Qt::AlignHCenter, day.toString("ddd"), &rect);
day = day.addDays(1);
}
day = day.addDays(-COLS);
y += dayh;
for (int j = 0; j < ROWS; ++j)
for (i = 0; i < COLS; ++i)
{
QColor color = day == today ? Qt::darkGray : Qt::lightGray;
painter.fillRect(dayw * i + 1, dayh * j + y + 1, dayw - 1, dayh - 1, color);
painter.drawText(dayw * i + 2, dayh * j + y + 2, dayw,
dayh, Qt::AlignTop|Qt::AlignJustify, day.toString("d"));
day = day.addDays(1);
}
}
calendar.h
#ifndef CALENDAR_H
#define CALENDAR_H
#include <QtGui>
#include <QDialog>
#include <QKeyEvent>
class PopupCalendar : public QDialog
{
Q_OBJECT
public:
PopupCalendar(const QDate &day = QDate::currentDate(), QWidget *parent = 0);
static QDate getDate(QWidget *parent = 0, const QDate &day = QDate::currentDate(),
QPoint pos = QPoint());
const QDate &day() const { return today; }
void setDay(const QDate &day);
QSize sizeHint() const;
signals:
void newDay(const QDate &day);
protected:
void mousePressEvent(QMouseEvent *event);
void keyPressEvent(QKeyEvent *event);
void paintEvent(QPaintEvent *event);
private:
enum { ROWS = 6, COLS = 7 };
QFont smallFont;
QDate today;
const QDate original;
};
#endif
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...