Russian Qt Forum
Май 08, 2024, 21:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 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.
Как сделать правильно?

23  Qt / Вопросы новичков / Re: Как сжать QImage без потери качества? : Октябрь 24, 2017, 09:13
Выставите для scaled TransformationMode в Qt::SmoothTransformation, ибо по-умолчанию стоит быстрая.
Спасибо. Помогло.
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);
Заранее спасибо.
25  Qt / Вопросы новичков / Re: QDataStream не читаются бинарные данные : Сентябрь 26, 2017, 16:47
Да, пишут, что для платформенной независимости.
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. Скажите, что я делаю не так?
28  Qt / Вопросы новичков / Re: Не работает setHeaderData : Сентябрь 21, 2017, 12:22
Разобралась. Необходимо было переопределить в модели еще два метода: headerData() и flags(), как написано здесь.
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 не спровоцировалось.
Страниц: 1 [2] 3 4

Страница сгенерирована за 0.059 секунд. Запросов: 23.