Qt анимированное вращение
Собственно необходимо сделать так. Естественно полоска должна крутиться.. Подскажите в какую сторону копать...
Собственно необходимо сделать так. Естественно полоска должна крутиться.. Подскажите в какую сторону копать...
Всем доброе утро!
Задача следующая. Есть флешка, на которую записан свой загрузчик и некоторое специфичное ПО. После того, как ПО выполнило все свои действия, оно начинает искать на текущем диске (флешке) все разделы, которые помечены как активные, и, если такой раздел существует, то его MBR грузится в память и туда передается управление. Диск, на котором ищутся активные разделы определяется из регистра dl (который заполнил BIOS). В доках сказано, что 0x00, 0x01 - это floppy А и B, 0x80 и 0x81 - это соответственно 1-й и 2-й хард (Primary и Secondary).
Необходимо сделать так, чтобы мое ПО искало активные разделы не только на диске, указанном в регистре dl но и на всех жестких дисках. Что будет если у меня несколько дисков, какие у них будут номера?
Еще пробовал установить grub (который в свою очередь уже бы загрузил ОС с других дисков) на primary раздел флешки (/dev/sdb3), но у меня не получилось его туда закатить...
Все привет
Сделал анимацию по свойству size класса QFrame
QPropertyAnimation *animation = new QPropertyAnimation(bufferFrame, "size");
animation -> setDuration(400);
animation -> setEasingCurve(QEasingCurve(QEasingCurve::OutCubic));
if(bufferButton -> arrowType() == Qt::LeftArrow) {
animation -> setEndValue(QSize(bufferFrame -> minimumWidth(), bufferFrame -> height()));
bufferButton -> setArrowType(Qt::RightArrow);
}
else {
animation -> setEndValue(QSize(bufferFrame -> maximumWidth(), bufferFrame -> height()));
bufferButton -> setArrowType(Qt::LeftArrow);
}
animation -> start(QAbstractAnimation::DeleteWhenStopped);
class SizeHintFrame : public QFrame {
public:
SizeHintFrame(QWidget * = 0);
virtual ~SizeHintFrame();
void setSizeHint(QSize);
void setSizeHint(int, int);
protected:
virtual QSize sizeHint();
private:
QSize _sizeHint;
};
SizeHintFrame::SizeHintFrame(QWidget *parent)
: QFrame(parent) {
// setSizeHint(QFrame::sizeHint());
}
SizeHintFrame::~SizeHintFrame() {
}
void SizeHintFrame::setSizeHint(QSize s) {
_sizeHint = s;
}
void SizeHintFrame::setSizeHint(int h, int w) {
_sizeHint = QSize(h, w);
}
QSize SizeHintFrame::sizeHint() {
return _sizeHint;
}
и добавил обработку завершения анимации
void MainWindow::bufferAnimationFinneshed() {
bufferFrame -> setSizeHint(bufferFrame -> size());
}
В консоль, по завершении анимации размеры виджета выводятся такие, какие и должны быть до и после анимации. Однако поведение не изменилось, размер виджета все-равно сбрасывается в исходный. P.S. После проделанного пробовал выставлять политику размера в QSizePolicy::Fixed, но это не помогло
День добрый. Собственно вопрос в сабже. При разработке собственной ОС, сначала ядро было собрано в бинарном формате, чуть позже, сборка переехала на elf формат. Теперь же мне необходимо собрать свое ядро в формате efi. Подскажите технологию, а то в инете не ищется что то по теме ничего...М.Б. уже кто то собирал?
Всем привет.
Не могу никак понять, почему не видна функция в динамически подгруженной библиотеке (самописной), которая реализована в самом приложении
module.h:
class A() {
public:
static A* get_instance();
private:
A();
static A *ptr;
}
module.cpp:
A* A::ptr=0;
A* A::get_instance() {
if(ptr==0) {
ptr = new A();
}
return ptr;
}
A* instance() {
return A::get_instance();
}
Теперь код библиотеки
#include "..../module.h"
extern "C" A* instance();
A *p = instance();
module.cpp линкуется только в приложение, там создается «одиночка» и ведется с ним работа. Далее в какой то момент времени подключается библиотека. Я хочу чтобы эта библиотека использовала этого же «одиночку». Все прекрасно компилится. Но когда я запускаю программу, то в момент подключения библиотеки выдает следующую ошибку:
./application: symbol lookup error: .../libplugin.so: undefined symbol: instance
P.S. Библиотека собиралась через механизм плагинов Qt. Однако проверял тоже самое штатными средствами ОС, ситуация та же.
Всем привет.
Дано: - descktop приложение для распространения;
Задача: - создать установочный пакет для ОС Windows, Mac и Linux - установочник должен писать начальные настройки приложения (так же как это делает QSettings) - установочник должен распространяться в виде одного файла
Вопрос: Можно ли сие сделать стандартными средствами(ну хотябы большую часть)? Надоело писать скрипты для сборки дистрибутивы под различные платформы... Или мне все же придется писать свой инсталятор?
Всем привет!
Разрабатываю программу, которая должна автоматом обновляться при запуске. Решил делать так: Всем известна возможность в Qt создавать свои собственные плагины, чтобы потом их на лету подгружать. Хочу поместить всю логику приложения в такие плагины, а загружать их на стадии выполнения программы. Другими словами: UpdateManager выполняет функции проверки обновлений, скачивания плагинов и их запуск (плагины естественно графические, UpdateManager - нет). В документации Qt сказано что нельзя делать плагины на Qt используя статическую сборку Qt, а мне надо, чтобы либы(как системные так и Qt-шные), которые используют мои плагины, были статически слинкованы с самим плагином, но при этом эти плагины были бы динамически подгружаемыми библиотеками. Сам UpdateManager тоже должен быть одним неделимым файлом. В итоге хочу получить бинарник UpdateManager и библиотеки, которые он может подключить. Никаких зависимостей в релиз не хотелось бы формировать. Использую Qt5.2, релиз должен быть сделан на Linux, Win, Mac. И хотелось бы, чтобы меньше проблем, кто что посоветует или скажет...
Все привет. Вообщем нужно следующее
Makefile
...
CFLAGS = ... -DARCH=intel
...
file.c
#define basef(p1, p2) p1##_p2
#define f1 basef(ARCH, f1)
#define f2 basef(ARCH, f2)
#define f3 basef(ARCH, f3)
void intel_f1() {
...
}
void intel_f2() {
...
}
void intel_f3() {
...
}
...
void init() {
f1();
f2();
f3();
но что то у меня никак не получается сделать задуманное...Вместо подстановки intel_f1 я получаю ARCH_f1 и соответственно undefined reference to `ARCH_f1'
Кто что скажет
Уважаемые знатоки, подскажите пожалуйста, в чем ошибка: Есть у меня две функции для чтения и записи секторов диска (IDE)
void ide_read_rep( IDE_Dev *dev, ui16 reg, ui16 count, ui16 *buf ) {
// portio_inw_rep( ide_get_port( dev, reg ), count, buf );
for(ui32 i = 0; i < count; ++i) {
buf[i] = portio_inw(ide_get_port( dev, reg ));
}
}
// Функция записи в порт с повторами
void ide_write_rep( IDE_Dev *dev, ui16 reg, ui16 count, ui16 *buf ) {
// portio_outw_rep( ide_get_port( dev, reg ), count, buf );
for(ui32 i = 0; i < count; ++i) {
portio_outw(ide_get_port( dev, reg ), buf[i]);
}
}
// Чтение слова из порта
ui16 portio_inw( ui16 port ) {
ui16 ret = 0;
__asm __volatile__ ( "inw %%dx, %%ax\n\t" : "=a" ( ret ) : "d" ( port ) );
return ret;
}
// Запись слова в порт
void portio_outw( ui16 port, ui16 value ) {
__asm __volatile__( "outw %%ax, %%dx\n\t" : : "a"( value ), "d" ( port ) );
}
// Чтение слова из порта с повторами
void portio_inw_rep( ui16 port, ui32 count, ui16 *buf ) {
__asm __volatile__ ( "rep insw\n\t" : "=D" ( buf ) : "d" ( port ), "c" (count) );
}
// Запись слова в порт с повторами
void portio_outw_rep( ui16 port, ui32 count, ui16 *buf ) {
__asm __volatile__( " rep outsw\n\t" : : "S"( buf ), "d" ( port ), "c" (count) );
}
Так вот, если в функциях чтения и записи воспользоваться функциями чтения с повторениями (portio_inw_rep, portio_outw_rep - эти функции закомментированы) вместо циклов for, то передаваемые буферы не заполняются (в случае чтения) / не записываются (в случае записи)... Никак не могу понять в чем дело, подскажите, если кто знает почему... Заранее спасибо
З.Ы. Видимо с ассемблером в С у меня не очень, та же ситуация с чтением msr регистра
ui32 msr_high;
ui32 msr_low;
ui32 msr_offset = 0x0480;
//__asm volatile ( "rdmsr\n\t"
// : "=d" (msr_high), "=a" (msr_low)
// : "c" (msr_offset) );
__asm volatile ( "rdmsr\n\t"
"movl %%edx, %0\n\t"
"movl %%eax, %1\n\t"
: "=m" (msr_high), "=m" (msr_low)
: "c" (msr_offset) );
printf("%x\n", msr_high);
printf("%x\n", msr_low);
// На экране нули...
Вечер добрый!
Предлагаю провести небольшой мозговой штурм, дело в том, что мне необходимо реализовать для своей «ос» менеджер памяти. В идеале необходим интерфейс аля alloc, free. В моей ос уже реализован механизм виртуальных адресов (по 4кб страница), но я что то не могу определиться с тем, как этот менеджер организовать. Точнее сказать, нужно понять каким способом мне описать свободную «кучу», как из нее доставать свободные страницы, и, самое главное, как привести к минимуму фрагментацию памяти (видимо при освобождении памяти надо еще дефрагментировать «висячие» участки). Может кто подскажет или ткнет носом куда нужно...
Заранее всем спасибо!
Все вечер добрый. Господа всея знающие, помогите пожалуйста разобраться с проблемой: есть код tty.h
#ifndef __TTY_H__
#define __TTY_H__
#include <types.h>
#define VIDEO_WIDTH 80 //ширина экрана
#define VIDEO_HEIGHT 25 //высота экрана
#define VIDEO_SIZE VIDEO_WIDTH * VIDEO_HEIGHT * 2
#define VIDEO_RAM 0xb8000 //адрес видеопамяти
void init_tty();
extern void set_text_attribute(ui8);
extern void clrscr();
extern void putchar(ui8);
extern void puts(ui8*);
#endif // __TTY_H__
#include <tty.h>
volatile static ui32 cursor; //положение курсора
volatile static ui8 attribute; //текущий аттрибут символа
//Инициализация tty
void init_tty() {
cursor = 0;
attribute = 3;
}
//Смена текущего аттрибута символа
extern void set_text_attribute(ui8 c) {
attribute = c;
}
//Очистка экрана
extern void clrscr() {
ui8 *video = VIDEO_RAM;
//attribute = 0x35;
for( ui32 i = 0; i < VIDEO_SIZE; i += 2 ) {
video[ i ] = attribute;
video[ i + 1] = ' ';
// video[ i ] = 0x0f;
// video[ i + 1] = attribute;
}
cursor = 0;
}
//Вывод одного символа в режиме телетайпа
extern void putchar(ui8 ch) {
ui8 *video = VIDEO_RAM;
ui32 i;
switch( ch ) {
case '\n': //Если это символ новой строки
cursor += VIDEO_WIDTH;
cursor -= cursor % VIDEO_WIDTH;
break;
default:
video[ cursor * 2 + 1 ] = ch;
cursor += 1;
break;
}
//Если курсор вышел за границу экрана, сдвинем экран вверх на одну строку
if( cursor > VIDEO_WIDTH * VIDEO_HEIGHT ) {
for( i = VIDEO_WIDTH * 2; i <= VIDEO_WIDTH * VIDEO_HEIGHT * 2 + VIDEO_WIDTH * 2; i++ ) {
*( video + i - VIDEO_WIDTH * 2 ) = *( video + i );
}
cursor-=VIDEO_WIDTH;
}
}
//Вывод строки, заканчивающейся нуль-символом
extern void puts(ui8 *s) {
init_tty();
while(*s) {
putchar(*s);
s++;
}
}
Обе глобальные переменные (cursor и attribute) ну никак не хотят менять свои значения, в коде функции clrscr (закоментил) производил проверку присвоения значения переменной, но на экран все равно попадает '\0'
компилю с такими флагами:
-O0 -fomit-frame-pointer -ffreestanding -finline-functions -nostdinc -fno-builtin -nostdlib -std=c99
з. ы. Ах да, как вы уже наверное догадались, все это делается в программе, запущенной из-под самописного загрузчика, тестирую на vmware
Привет всем. Никак не получается подключить putty к машине, запущенной на vmware через com порт. Делаю следующее: В настройках виртуальной машины добавил serial port, указал named pipe «/tmp/mypipe» from «Server» to «An Applcation». Запускаю виртуалку, pipe создается, пытаюсь подключиться к нему через putty с настройками serial, /tmp/mypipe, 115200, а она мне зараза «Unable to open connection to /tmp/mypipe:» и «Unable to open serial port».
не могу понять, в чем дело... Может кто решал эту проблему...
PS. Виртуалку запускаю, дожидаюсь, когда высветится меню загрузчика, и пробую подключиться через putty. VmWare Workstation 10 Заранее спасибо
Все привет. Собственно проблема представлена в сабже. Есть логи, которые содержат данные в формате дата
уровеь отладки ... сообщение
ls -l
-rw------- 1 root root 15968185 Oct 30 22:47 universe.log-20131031
tail universe.log-20131031
2013-10-30 22:47:14,768 INFO ...
2013-10-30 22:47:14,769 INFO ...
2013-10-30 22:47:14,769 INFO ...
2013-10-30 22:47:14,769 INFO ...
2013-10-30 22:47:14,769 INFO ...
Дата в имени файла на один день больше, видимо из-за того, что ротируется после 00.00 часов Подскажите пожалуйста как избавиться от проблемы и дату сделать правильной
Господа, всем добрый день. Сразу прошу прощение за вопрос по винде, считаю, что это больше кутешный вопрос. Проблема: Для установки иконки приложения использую setWindowIcon (иконка берется из ресурсов) в процессе работы программы, в зависимости от количества новых событий, перерисовываю иконку использую painter (На иконке рисуется красный круг и цифра с числом новых сообщений). В трее все норм, в заголовке окна и при нажатии alt+tab (в иконке) тоже все норм, иконка постоянно меняется, а вот в панели ПУСК иконка меняться упорно не хочет, та, что в первый раз была установлена, больше не меняется. Неообходимо, чтобы было аля skype (цифра на желтом фоне - число новых сообщений)
...
icon = self.createIcon(status, unanswered_messages, Qt.Qt.AlignCenter)
self.tray.setIcon(icon)
icon = self.createIcon(':/general/app_icon', unanswered_messages, Qt.Qt.AlignCenter)
self.setWindowIcon(icon)
def createIcon(self, base, text='', textAlign=Qt.Qt.AlignCenter):
pixmap = Qt.QPixmap(base)
image = pixmap.toImage()
painter = Qt.QPainter();
painter.begin(image)
bgrect = Qt.QRect(image.rect())
if base == ':/general/app_icon':
bgrect.setRect(bgrect.x() + 20, bgrect.y() + 20, bgrect.width() - 25, bgrect.height() - 20)
else:
bgrect.setRect(bgrect.x() + 2, bgrect.y() + 2, bgrect.width() - 5, bgrect.height() - 5)
painter.setBrush( Qt.QBrush(Qt.Qt.red) )
painter.drawEllipse(bgrect)
if base == ':/general/app_icon':
font = painter.font()
font.setPixelSize(14)
font.setBold(True)
painter.setFont(font)
painter.drawText(Qt.QRect(bgrect), textAlign, str(text))
else:
painter.drawText(image.rect(), textAlign, str(text))
painter.end()
return Qt.QIcon(Qt.QPixmap.fromImage(image))
Господа знатоки, всем доброе утро. Подскажите пожалуйста, в чем может быть проблема?В системе запущены три программы, которые ведут логирование через rsyslog. вот конфиги:
/etc/rsyslog.conf
...
############################
# Portal`s logging configs #
############################
$IncludeConfig /opt/comagic/cfg/comagic_rsyslog.cfg
$IncludeConfig /opt/upuis/cfg/uis_rsyslog.cfg
$IncludeConfig /opt/novomagic/cfg/novomagic_rsyslog.cfg
и соответственно конфиги проектов:
/opt/novomagic/cfg/novomagic_rsyslog.cfg
# Устанавливает права доступа, владельца и группу по умолчанию для лог-файлов.
$FileOwner root
$FileGroup root
$FileCreateMode 0666
$DirCreateMode 0775
# Шаблоны для логирования
$template log_file_novomagic,"%$now% %timereported:8:15%,%timereported:1:3:date-subseconds%%msg:0:17%%msg:18:58%%msg:59:70%%msg:71:111%%msg:112:$%\n"
# Правила логирования
!novomagic
local6.* /opt/novomagic/log/universe.log;log_file_novomagic
/opt/comagic/cfg/comagic_rsyslog.cfg
# Устанавливает права доступа, владельца и группу по умолчанию для лог-файлов.
$FileOwner root
$FileGroup root
$FileCreateMode 0666
$DirCreateMode 0775
# Шаблоны для логирования
$template log_file_comagic,"%$now% %timereported:8:15%,%timereported:1:3:date-subseconds%%msg:0:15%%msg:16:56%%msg:57:68%%msg:69:109%%msg:110:$%\n"
# Правила логирования
!comagic
local6.* /opt/comagic/log/universe.log;log_file_comagic
/opt/upuis/cfg/uis_rsyslog.cfg
# Устанавливает права доступа, владельца и группу по умолчанию для лог-файлов.
$FileOwner root
$FileGroup root
$FileCreateMode 0666
$DirCreateMode 0775
# Шаблоны для логирования
$template log_file_upuis,"%$now% %timereported:8:15%,%timereported:1:3:date-subseconds%%msg:6:13%%msg:14:54%%msg:55:66%%msg:67:107%%msg:108:$%\n"
# Правила логирования
!upuis
local6.* /opt/upuis/log/universe.log;log_file_upuis
А так же настроен logrotate
/etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
/opt/novomagic/log/universe.log
/opt/upuis/log/universe.log
/opt/comagic/log/universe.log {
rotate 90
create
daily
missingok
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
Проблема в следующем, когда происходит ротация логов (один раз в день) то:
PS. Для записи в rsyslog используется SysLogHandler из состава модуля logging (python2.7)
HELP
Всем привет, друзья на картинке собственно моя проблема. Сверху то, как реализовано сейчас, снизу - как необходимо. Там используется QLineEdit и установлена маска с заполнителем _, мне необходимо, чтобы маска осталась но заполнители были дд.мм.гггг и чч:мм. Кто что скажет по этому поводу
Добрый день господа, посоветуйте пожалуйста решение проблемы, а то что то у меня никак не получается
ДАНО: есть класс, который является своего рода средством организации вычислительного процесса, в нем могут выполняться разные сущности - юниты (все наследованы от Unit). Сам класс помимо предоставления средств регистрации, запуска, останова (и т.д.) юнитов еще инициализирует некоторую плату. Соответственно юниты через главный класс работают с различными сервисами платы. Главный класс содержит в себе реализацию паттерна «Одиночка». Так же базовый класс может назначить выполнение юнита в конкретном потоке, а может назначит его работу в своем потоке
Пример:
class A(Unit):
def init(self):
self.base = BASE()
# работает с сервисом А через self.base
class B(Unit):
def init(self):
self.base = BASE()
# работает с сервисом Б через self.base
...
class BASE(object):
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super(BASE, cls).__new__(cls)
return cls.instance
def __init__(self):
# инициализация платы
self.plata = self.plata_init() # здесь поднимается плата ...
# конект к БД
self.db = self.connect_db()
...
Иногда требуется следующее, предположим сервис Б прислал юниту B сообщение, что обновился статус. Такое событие должно быть отправлено на сервер, и, чтобы в потоке юнита сама отправка не выполнялась, передается задание в task_manager (он тоже юнит и тоже одиночка) task_manager изначально порождал отдельный поток и создавал очередь, поток читал из очереди и создавал задания (опять же юниты, которые тоже могут пользоваться self.base из базового класса), однако из-за такой задницы как GIL, такие процедуры жутко тормозят работу базового класса и основных юнитов (таких как А и B). Я хотел было попробовать модуль multiprocessing, и через очередь передавать обработку заданий в дочерний процесс (хоть там GIL не подпортит мне жизнь), но в один момент времени с платой может работать только один процесс - значит надо базовый класс поместить в shared memory, но правильно это сделать у меня не получилось, подскажите советом друзья. Рассмотрю концептуально другие решения, заранее спасибо
Всем хеллоу. Помогите пожалуйста вывести иконку в таскбаре (не путать с треем) windows 7. Как иконку в трее сделать я знаю, а как ее же отдублировать в таскбар - не в курсе, заранее спасибо
Собственно вопрос озвучил, добавлю только что нужно кроссплатформенное решение (хотя готов рассмотреть условное выполнение кода), ну а так же программа написана на PyQt4
Всем привет! Значит стоит вопрос в следующем: Есть программа на Qt - аля чат. Неообходимо, чтобы количество новых сообщений отображалось в трее в иконке. Как сделать трей и иконку я знаю, однако не понимаю как мне в существующую иконку втыкнуть число новых месседжей. Кто что знает по этому поводу? Должно быть так же как например в скайпе
← предыдущие | следующие → |