Просмотр сообщений
|
Страниц: 1 [2] 3 4
|
16
|
Qt / Вопросы новичков / Re: Как получить имя модуля dll
|
: Ноябрь 02, 2017, 07:55
|
Напр так [...]
Спасибо большое. В моих попытках применить GetModuleHandleEx() с флагом GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, неизменно в hmodule возвращался 0. В вашем варианте все работает. Это всё хорошо, но постановку задачи вы так и не сказали:)
А мне казалось, что все ясно . Вообще, хочу чтобы ini файл настройки моей dll лежал рядом с dll, а не рядом с exe. Это на случай если dll и exe находятся в разных каталогах. Ну и... неплохо знать откуда загружается dll, если их несколько одинаковых(разных версий) валяется в разных местах ). а как это связано с Qt?
Разработку веду в Qt.(Естественно, обычные винапишные. Как я понимаю, из-за кроссплатформенности Qt других и быть не может)
|
|
|
17
|
Qt / Вопросы новичков / Re: Как получить имя модуля dll
|
: Ноябрь 01, 2017, 14:04
|
Получилось. Кому интересно, хэндл dll в Qt под Win можно получить так: static HMODULE GetThisDllHandle() { MEMORY_BASIC_INFORMATION info; size_t len = VirtualQueryEx(GetCurrentProcess(), (void*)GetThisDllHandle, &info, sizeof(info)); assert(len == sizeof(info)); return len ? (HMODULE)info.AllocationBase : NULL; } а затем передать его в GetModuleFileName(). В результате получаем полный путь с именем dll из самой dll.
|
|
|
18
|
Qt / Вопросы новичков / Re: Как получить имя модуля dll
|
: Ноябрь 01, 2017, 11:18
|
Можно получить из хендла путь и наоборот, а что Вы хотите - неясно. Может узнать в какой dll сидит текущий исполняемый код? (других разумных вариантов не видно). Тогда курите GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
Я хочу получить имя модуля dll и путь к dll из самой dll. Если я снова выразилась неясно, пожалуйста, сообщите об этом сразу, не наблюдайте молча.
|
|
|
19
|
Qt / Вопросы новичков / Re: Как получить имя модуля dll
|
: Ноябрь 01, 2017, 10:52
|
Попробовала вместо хэндла dll использовать хэндл окна: ::GetModuleFileName( (HMODULE)this->winId(), (LPWSTR)dllname, sizeof(dllname) ); Получаю массив, заполненный нулями.
|
|
|
20
|
Qt / Вопросы новичков / Re: Как получить имя модуля dll
|
: Ноябрь 01, 2017, 10:33
|
Retrieves the fully qualified path for the file that contains the specified module. The module must have been loaded by the current process.
hModule [in, optional] A handle to the loaded module whose path is being requested. If this parameter is NULL, GetModuleFileName retrieves the path of the executable file of the current process. Как в Qt получить HMODULE или HINSTANCE dll-ки, чтобы передать его в GetModuleFileName()? P.S. MSDN я тоже читаю...
|
|
|
21
|
Qt / Вопросы новичков / Re: Как получить имя модуля dll
|
: Ноябрь 01, 2017, 10:08
|
Какой-то замкнутый круг получается... Я получаю путь и имя exe вместо пути и имени dll, потому что в GetModuleFileName() указываю первый параметр NULL. А получить HMODULE или HINSTANCE dll-ки можно только из WINAPI DllEntryPoint. То есть, если dll загружается из другого каталога, получается я путь к ней узнать не могу?
|
|
|
22
|
Qt / Вопросы новичков / Как получить имя модуля dll
|
: Ноябрь 01, 2017, 08:10
|
Здравствуйте! Мне нужно получить наименование dll и полный путь к ней. Для этого в dll использую функцию WINAPI GetModuleFileName(): char dllname[_MAX_PATH] = {0}; ::GetModuleFileName( NULL, (LPWSTR)dllname, sizeof(dllname) ); QString qstr=dllname; qDebug()<<qstr;
В результате в dllname получаю массив символов Unicode - полный путь и имя .exe файла, загружающего dll. Как сделать правильно?
|
|
|
24
|
Qt / Вопросы новичков / Как сжать QImage без потери качества?
|
: Октябрь 24, 2017, 08:49
|
Здравствуйте! Мне нужно сделать скриншот виджета и внести его в QTextEdit. При этом скриншот нужно уменьшить. При уменьшении качество теряется. Как сделать так, чтобы качество не терялось? Например, когда в Paint загружаешь png и потом сжимаешь, качество не теряется. Можно ли то же самое реализовать? Делаю так: QTextDocument *document = m_teReport->document(); QTextCursor cursor = m_teReport->textCursor();
//Создать картинку текущего размера виджета QImage screenshort(m_wBottomChart->size(), QImage::Format_ARGB32_Premultiplied);
QPainter painter(&screenshort);
//Отрисовать изображение с виджета на картинку m_wBottomChart->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);
//Здесь трансформация приведена для примера, при сжатии картинка искажается screenshort = screenshort.scaled(screenshort.width()/2, screenshort.height()/2, Qt::IgnoreAspectRatio);
//Вставка в QTextEdit QString imageName="image"+QString::number(m_counter); document->addResource(QTextDocument::ImageResource, QUrl(imageName), QVariant(screenshort)); cursor.insertImage(imageName);
Заранее спасибо.
|
|
|
26
|
Qt / Вопросы новичков / Re: QDataStream не читаются бинарные данные
|
: Сентябрь 26, 2017, 13:05
|
Разобралась. Надо вручную устанавливать точность. Если версия превосходит Qt 4.6, то точность по умолчанию - 64 бит. Т.е. Qt попытается прочитать float 32 как float 64. Надо писать: stream.setFloatingPointPrecision(QDataStream::SinglePrecision); ЗЫ. Если честно, меня Qt порой обескураживает... Зачем для типа данных, который имеет 32 бит по умолчанию считывать 64 бит? Видимо, я чего-то не понимаю...
|
|
|
27
|
Qt / Вопросы новичков / QDataStream не читаются бинарные данные
|
: Сентябрь 26, 2017, 12:19
|
Всем привет! Пытаюсь прочесть двоичный файл. Файл начинается со следующей последовательности байт: 68 D9 27 42 00 00 00 00 00 C3 47 42 EA 60 Пытаюсь прочесть два значения типа float: QFile file("E:/1.bin"); if(file.open(QIODevice::ReadOnly)) { QDataStream stream(&file); stream.setByteOrder(QDataStream::LittleEndian); stream.setVersion (QDataStream::Qt_5_9);
float a; float b; stream >> a; stream >> b; if(stream.status() != QDataStream::Ok) { qDebug() << "Ошибка чтения файла"; } else { qDebug() << a; qDebug() << b; } file.close(); }
Должно быть a=41.9623, b=0, получаю a=0, b= 7.49724e-13. Скажите, что я делаю не так?
|
|
|
29
|
Qt / Вопросы новичков / Не работает setHeaderData
|
: Сентябрь 21, 2017, 10:00
|
Здравствуйте! Хочу в таблице отобразить данные из QMap. На форму в графическом дизайнере кладу компонент Table View Делаю все как в справке. Но у меня заголовки столбцов в таблице отображаются цифрами и ширина столбца не раздвигается по содержимому. //Создаю модель dataModel=new dataTableModel(channelList);
//Назначаю столбцам модели заголовки dataModel->setHeaderData(0, Qt::Horizontal, tr("ID")); dataModel->setHeaderData(1, Qt::Horizontal, tr("name"));
//Раздвигаю ширину столбцов представления ui->tableView->resizeColumnsToContents();
ui->tableView->setModel(dataModel); Что не так? dataTableModel наследует QAbstractTableModel. Qt 5.9.
|
|
|
30
|
Qt / Вопросы новичков / Re: Несколько раз возникает событие перерисовки paintEvent()
|
: Сентябрь 19, 2017, 09:04
|
А как Вы увидели что все отрисовалось? Если остановились в отладчике, то это могло сменить фокус что провоцирует новый paintEvent.
Остановилась в отладчике. Работаю с двумя мониторами, экранная форма отображалась на отдельном мониторе, поэтому не сворачивалась и не перекрывалась, так что новое событие paintEvent не спровоцировалось.
|
|
|
|
|