Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
1

Планировщик заданий

25.01.2015, 13:46. Просмотров 2241. Ответов 21
Метки нет (Все метки)

Хочу написать планировщик, но немного запутался.

1) Нужно, чтобы рабочее окно было поделено на две части: первая половина с обычным текстом ("Добро пожаловать..."), как в пиратских установщиках программ, в общем). Вторая же представляла собой список задании в табличном виде (три столбца - время, текст задания, приоритет). С первой половиной вроде справится QLabel, а какой класс использовать во втором случае? Не обязательно, но с возможностью редактирования текста прямо в окошке списка.

2) На сайтах при установке даты/времени может вызваться окошко с календарем и списком для времени. Есть готовый класс для такого в Qt?

3) Когда наступит время какого-либо задания, должно выйти окошко поверх всех окон. С окошком проблем нет, но вот как отсчитывать время до наступления задания? Я бы поставил таймер, но приложение может быть закрыто, и тогда таймер может сбиться (по-моему).
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2015, 13:46
Ответы с готовыми решениями:

Смена заданий и ответов по нажатию кнопки
Здравствуйте. Встала задача написать программу для тестирования школьников, но проблема в том что в...

Планировщик заданий
ПОМОГИТЕ,ПОЖАЛУЙСТА...создать программу,которая включает службу планировщика задания"schedule" и...

Планировщик заданий
Задал задание планировщику по включению компьютера на запуск некоторой проги, и я не вижу - а...

Планировщик заданий
Помогите с кодом, для создания задачи запуска файла в планировщике задач Добавлено через 1 час 4...

Планировщик заданий
Есть задумка, не знаю возможно ли реализовать её средствами Аксесс. Допустим есть список заданий...

21
Чистый
Автор FAQ
2722 / 1418 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
25.01.2015, 16:04 2
Если приложение закрыто, то ничего не поможет, включая выполнить задание. вывод, Ваш плонировщик всегда должен работать, либо его составная часть в качестве службы. Если хотите можете помещать задания в системный планировщик, но тогда и смысла в Вашей программе нет.
0
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
25.01.2015, 16:34  [ТС] 3
Чистый, или в трей можно засунуть. Не думаю, что планировщик будет так много пожирать ресурсов. Ладно, а что насчет других вопросов?
0
Байт
Эксперт C
22294 / 14045 / 2967
Регистрация: 24.12.2010
Сообщений: 29,932
25.01.2015, 16:49 4
Цитата Сообщение от tnk500 Посмотреть сообщение
окошко с календарем и списком для времени. Есть готовый класс для такого в Qt?
QDateTimeEdit

Добавлено через 56 секунд
Цитата Сообщение от tnk500 Посмотреть сообщение
Вторая же представляла собой список задании в табличном виде (три столбца - время, текст задания, приоритет). С первой половиной вроде справится QLabel, а какой класс использовать во втором случае? Не обязательно, но с возможностью редактирования текста прямо в окошке списка.
QTableWidget - QTableView
1
25.01.2015, 16:49
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
25.01.2015, 17:07  [ТС] 5
Байт, во, спасибо, никак я не разберусь в классах Qt.

А кстати, даже если программа все время будет запущена, как часто проверка, наступило ли время задания будет выполняться? В SDL обычно имеется главный цикл, и там приложение обновляется при каждой итерации цикла, соответственно, обновляется время currentTime(). Или в WinAPI есть цикл обработки сообщении. А вот в Qt я не понял, что именно отвечает за обновление приложения
0
Avazart
Эксперт С++
8010 / 5829 / 575
Регистрация: 10.12.2010
Сообщений: 26,859
Записей в блоге: 19
25.01.2015, 17:18 6
Цитата Сообщение от tnk500 Посмотреть сообщение
А вот в Qt я не понял, что именно отвечает за обновление приложения
Вероятно тоже цикл обработки сообщений, только он глубоко скрыт.

Добавлено через 2 минуты
Цитата Сообщение от tnk500 Посмотреть сообщение
Я бы поставил таймер, но приложение может быть закрыто, и тогда таймер может сбиться (по-моему).
Цитата Сообщение от tnk500 Посмотреть сообщение
как часто проверка, наступило ли время задания будет выполняться?
за висит от интервала который таймеру задашь.
0
RazrFalcon
1393 / 1250 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
25.01.2015, 18:54 7
Цитата Сообщение от Avazart Посмотреть сообщение
Вероятно тоже цикл обработки сообщений, только он глубоко скрыт.
Почему скрыт: http://doc.qt.io/qt-5/qcoreapplication.html#exec
0
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
27.01.2015, 20:48  [ТС] 8
В QTableWidget можно вставить маленькую картиночку (для приоритета задания)? Через QLabel, в который сохранена картинка QPixmap?
0
Чистый
Автор FAQ
2722 / 1418 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
27.01.2015, 20:53 9
Да можно.
0
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
30.01.2015, 15:55  [ТС] 10
Появилось еще несколько вопросов

1. Как заставить QtableWidget не показывать номера строк, а вместо клеток просто выводить обычную строку? Я бы QListWidget использовал бы, но мне нужно, чтобы строка была поделена между столбцами "Задача", "Приоритет"...

2. Вместо русских символов крякозябры. Что делать?

3. Куда засовывать код проверки прихода времени задания? Чтобы проверка шла постоянно в течение выполнения программы? Учитывая что задании будет много, т.е. переменных даты/времени для проверки тоже будет много. ---- а, забыл про обработчик событий. Верно?

4. И как заставить переменную QDateTime выводить дату-время в формате "дд.ММ.гггг чч:мм"? time.toString("dd.MM.yyyy hh:mm") ?
0
Aneron
165 / 163 / 27
Регистрация: 20.04.2010
Сообщений: 607
Завершенные тесты: 1
30.01.2015, 16:09 11
Цитата Сообщение от tnk500 Посмотреть сообщение
Появилось еще несколько вопросов
1. Как заставить QtableWidget не показывать номера строк, а вместо клеток просто выводить обычную строку? Я бы QListWidget использовал бы, но мне нужно, чтобы строка была поделена между столбцами "Задача", "Приоритет"...
2. Вместо русских символов крякозябры. Что делать?
3. Куда засовывать код проверки прихода времени задания? Чтобы проверка шла постоянно в течение выполнения программы? Учитывая что задании будет много, т.е. переменных даты/времени для проверки тоже будет много. ---- а, забыл про обработчик событий. Верно?
4. И как заставить переменную QDateTime выводить дату-время в формате "дд.ММ.гггг чч:мм"? time.toString("dd.MM.yyyy hh:mm") ?
1. Скрой столбик вместе с нумерацией.
2. Установи локаль. QTextCodec посмотри.
4. QDateTime::toString().
Такое ощущение, что вы не любите открывать документацию.
0
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
30.01.2015, 17:30  [ТС] 12
Aneron, смотреть-то смотрю, разобраться никак не могу.
И какой метод отвечает на скрытие номеров строк? Ни в Шлее, ни в crossplatform я не видел этого метода.

Переменной QDateTime time присваивается текущее время. Но при присвоении ее переменной QTableWidgetItem в таблице ее почему-то нет

C++ (Qt)
1
2
3
4
time = QDateTime::currentDateTime();
...
item->setText(time.toString());
table->setItem(0, 0, item);
0
Aneron
165 / 163 / 27
Регистрация: 20.04.2010
Сообщений: 607
Завершенные тесты: 1
30.01.2015, 17:45 13
С каких времен Шлее являtтся офф документацей? =DDDD

На вскидку:
QTableWidget::vericalHeader()::setVisible( false ). Если не прокатит, то попробуй QTableWidget::hideColumn( 0 ).

Посмотри, что выведет
C++ (Qt)
1
2
QDateTime time = QDateTime::currentDateTime();
QString dtString = time.toString();
Если там все нормально, значит косяк в твоем итеме. Если не все хорошо - значит косяк в выводе в строку. Попробуй указать в QDateTime::toString каой нить формат адекватный)))
0
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
30.01.2015, 17:57  [ТС] 14
Aneron, а вы говорили об офф документации?) Ну учебник он более-менее, хотя больших и интересных примеров не видел; когда калькулятор переписывал, оказалось, что он не правильно считает, пришлось самому исправлять, но целью автора явно было рассказать о компоновке.

Дата не появляется. След. текст, который я инициализирую в item, в таблице отображается. Рашшан текст ни на CP866, ни CP1251 не отображается. А вот нумерация строк пропало, спасибо)
0
Байт
Эксперт C
22294 / 14045 / 2967
Регистрация: 24.12.2010
Сообщений: 29,932
30.01.2015, 18:48 15
Цитата Сообщение от tnk500 Посмотреть сообщение
1.
C++ (Qt)
1
tab->verticalHeader()->hide();
0
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
31.01.2015, 13:41  [ТС] 16
Байт, насчет этого ответили. Теперь надо бы разобраться, почему текст не появляется в первой колонке таблицы.
Вот исходнки, в общем (просто заготовки)
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef TASK_H
#define TASK_H
#include <QtGui>
#include <QObject>
 
class Task : public QWidget
{
    Q_OBJECT
private:
    QDateTime* time;
    QString task;
    QList<QString> list;
    QTableWidgetItem* item;
    QString priory;
    QTableWidget* table;
public:
    Task();
    void setTime(QDateTime* tim)
    {
        time = tim;
    }
    void setTask(QString tas)
    {
        task = tas;
    }
public slots:
    //void addTask();
};
 
#endif // TASK_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <QApplication>
#include "task.h"
 
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QTextCodec *codec = QTextCodec::codecForName("CP866");
    QTextCodec::setCodecForTr(codec);
 
    Task task;
    task.resize(600, 325);
    task.show();
 
    return app.exec();
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "task.h"
#include <QtGui>
 
Task::Task()
    : task("My only best friend!")
{
 
    time = new QDateTime(QDateTime::currentDateTime());
    item = new QTableWidgetItem(time->toString("dd.MM.yyyy hh:mm"));
    QGridLayout* grid = new QGridLayout;
    QLabel* lbl = new QLabel("Welcome to the task Планнер!\n"
                             "Please add your task to the\nfield to the right.\n" + time->toString("dd.MM.yyyy hh:mm"));
    table = new QTableWidget(3, 3);
    QStringList lst;
    lst << "Date/Time" << "Task" << "Priority";
    table->setHorizontalHeaderLabels(lst);
    table->setShowGrid(0);
    table->horizontalHeader()->resizeSection(0, 100);
    table->horizontalHeader()->resizeSection(1, 285);
    table->horizontalHeader()->resizeSection(2, 46);
    table->verticalHeader()->setVisible(0);
    item->setTextAlignment(Qt::AlignCenter);
    table->setItem(1, 1, item);
    item->setText(task);
    table->setItem(1, 2, item);
    QPushButton* add = new QPushButton(QPixmap("add.png"), "&A", this);
 
    grid->addWidget(lbl, 0, 0);
    grid->addWidget(table, 0, 1, 3, 3);
    grid->addWidget(add, 4, 3);
    setLayout(grid);
}


Добавлено через 18 часов 13 минут
Черт, ну никак я не могу понять, что с qt такое происходит. Ни картинку, расположенную там же, где pro файл, ни текст для таблицы он не видит. пишу table->setItem(0, 0, item) - ничего. А следующий за ним код
item->setText(task);
table->setItem(0, 1, item)

он видит, и вставляет во второй столбец текст, оставляя первый пустым. НУ ЧТО ЗА ЧУШЬ?! Я щас плакать начну из этих проблем...
0
Байт
Эксперт C
22294 / 14045 / 2967
Регистрация: 24.12.2010
Сообщений: 29,932
31.01.2015, 15:27 17
Цитата Сообщение от tnk500 Посмотреть сообщение
Я щас плакать начну из этих проблем...
Крепитесь!
Посмотрите, куда у вас попадает результирующий экзэшник? Когда происходят игры с debug - release, он может оказаться совсем в другой папке. Еще попробуйте
C++ (Qt)
1
2
    qDebug() << "Dir of EXE:" << QApplication::applicationDirPath();  
    qDebug() << "Path of EXE:" << QApplication::applicationFilePath();
Это может прояснить ситуацию
1
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
31.01.2015, 18:08  [ТС] 18
Байт, но ведь это проект, можно картинки в папку с файлом проекта бросать, как в VS. Или нет?

Добавлено через 4 минуты
Насчет не выводящейся записи появились логи
QTableWidget: cannot insert an item that is already owned by another QTableWidget

Добавлено через 13 минут
Экзешник падает именно туда, где и должен быть и где находится картинка.
0
Байт
Эксперт C
22294 / 14045 / 2967
Регистрация: 24.12.2010
Сообщений: 29,932
31.01.2015, 18:24 19
Цитата Сообщение от tnk500 Посмотреть сообщение
но ведь это проект, можно картинки в папку с файлом проекта бросать.
Ну и что что проект? Правила поиска файлов никто не отменял. Что твой проект при запуске программы считает текущей папкой - это ты у него спрашивай. А перед тем как спрашивать дальше, будь добр(добра) выполнить советы из поста 17 (это же проще, чем слезы горькие лить) и отчитаться

Добавлено через 2 минуты
Цитата Сообщение от tnk500 Посмотреть сообщение
Экзешник падает именно туда, где и должен быть и где находится картинка.
Но текущая папка может быть совсем другая. Собери все, что нужно в одну отдельную папку и попробуй запустить.
0
tnk500
115 / 119 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
Завершенные тесты: 3
31.01.2015, 21:54  [ТС] 20
Байт, разобрался-таки. Оказывается, картинки следует держать у make-файла, если запускать с IDE. Про исчезнувший текст тоже ясно - как оказалось, выделять память под QTableWidgetItem нужно каждый pаз перед изменением данных, находящихся в нем. Ну и оказии. Интересно все-таки, почему нельзя просто воспользоваться методом setText снова... Хотя я слышал про QTableView, там вроде таких проблем нет
0
31.01.2015, 21:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2015, 21:54

Планировщик заданий на c#
Задача такая: есть доменная сеть, в случае необходимости нужно на всех компьютерах запустить...

Планировщик заданий
Доброго времени суток! В планировщике заданий во вкладке &quot;Действия&quot;, с выбранным параметром...

Планировщик заданий
Что то я тупанул и наверно создал не правильную задачу &quot;по выключению компа&quot;. Создавал по данному...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.