Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Qt Не найдена точка входа в dll Добрый вечер господа. Я скомпилировал проэкт Qt в Ms VS C++ 2010, запустил дебаг, но выдает подобное сообщение, мол, не найдена точка входа в процедуру такой-то длл, то что можно в таком случае предпринять? Я плохо знаком с технологией длл, потому если не затруднит вас, не могли бы вы объяснить в чем может быть ошибка? Что я мог такое написать что выдает такое сообщение.. Если можно,... https://www.cyberforum.ru/ qt/ thread450002.html C++ Qt Отображение массива изображений.
Нужно вывести на форму 16 картинок. Для начала хотя бы в ряд.... Я попробовал такое: QPixmap p; for(int i=0; i<16;i++) p.load("D:\\qt\\15\\"+QVariant(i).toString()+".png"); QLabel l; for(int i=0; i<16;i++) { l.resize(p.size()); l.setPixmap(p); l.setGeometry(i*45,0,p.size().width(),p.size().height());
C++ Qt Ошибка консольного приложения Что это? Скриншот в вложении... https://www.cyberforum.ru/ qt/ thread449698.html C++ Qt Работа с Bluetooth https://www.cyberforum.ru/ qt/ thread449453.html
Люди добрые, подскажите где почитать, разобраться с работой с Bluetooth в Qt ?
MySql + Qt C++ Qt
Вопрос конечно заезженный, но все же того, что мне надо так нигде и не нашел. Проблема следующая: пишу программу с использованием MySql на Qt. Естественно драйвер мускула на Qt автоматически не подключается. Теперь собственно вопрос: как его подключить? Нашел что-то про изменение параметров запуска configure, но как это сделать не представляю. Если можно, напишите конкретные команды. Пишу в...
C++ Qt QThread https://www.cyberforum.ru/ qt/ thread448909.html
Всем день добрый! Есть программка, которая при загрузке должна расшифровать некоторые данные из БД. Этих данных, как сами понимаете, будет приличное число. Алгоритм дешифрования - достаточно долгий. Есть такая мысля: Разбить таблицу на несколько кусков, скажем по 100 записей. Создать для каждой сотни создать свой поток и дешифровать каждые 100 записей в своем потоке. Есть ли смысл...
C++ Qt QListView настройка... https://www.cyberforum.ru/ qt/ thread448495.html
Подскажите пожалуйста как можно настроить QListView: 1) Поменять цвет текста находящийся в нём 2) Привязать свою команду редактирования поля по двойному клику мыши(клацаем и поле переименовывается в "ок" к примеру) 3) Убрать стандартное выделения рамочкой поля при двойном клике... и сделать своё выделение 4) Поменять бэкграунд всего QListView 5) Поменять горизонтальный и вертикальный...
Download Manager C++ Qt
Как реализовать многопоточный режим скачивания с возможностью докачки, какие средства в Qt есть для упрощения решения этой задачи? (В крайнем случае можно самому на уровне пакетов это реализовать, но должны же быть в Qt какие-то классы, которые упростят написание кода). PS Пример в Qt Download Manager видел, но в решении данной задачи он ничем не поможет.
C++ Qt Qt_Creator 2.4 https://www.cyberforum.ru/ qt/ thread447637.html
Доброго времени суток. Никогда до сегодняшнего дня не видел Qt Creator в глаза, но недавно появилась необходимость научиться работать в этой среде разработки. ОС - windows7. Установил Qt Creator 2.4.0 из qt-creator-win-opensource-2.4.0.exe (54 Мб). Запустил среду, попытался создать проэкт Консольное приложение Qt, однако на этапе "Цели" мне написало что "Не найдены подходящие профили Qt....
C++ Qt шифруем прямые соеденения. https://www.cyberforum.ru/ qt/ thread447567.html
До недавних пор мне написал человек и сказал что он получил доступ к серверу mysql И теперь вопрос как можно зашифровать прямое соединение. чтобы нельзя было получить логин и имя.
Поиск значений в QtableWidget C++ Qt
Есть заполненный QTableWidget (см вложение), как мне найти строки значение которых в определенном столбце например 1 (ID_Table) равно чему-либо например 0. написал так: itm=ui->tableWidget->findItems(lst.at(2), Qt::MatchContains); QTableWidgetItem *item; foreach (item, itm) { if(item->column()==0) { qDebug()<< "TEXT: "...
C++ Qt Передача сообщения в QDialog https://www.cyberforum.ru/ qt/ thread447315.html
Добрый день, или ночь тому кто трудится... Создаю чат. Имеется MainWindow - где на экран выводятся поступившие все сообщения от все пользователей. Некий общий чат сообщений. Есть сервер который крутится отдельно. Возникла необходимость чтобы кроме имеющихся сообщения user мог посылать отдельные сообщение конкретному пользователю. От сюда сделал вывод и пришел к следующему. Создал сокет для всех...
387 / 294 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
28.11.2012, 00:57 0

Вопрос - Ответ для новичков по Qt - C++ Qt - Ответ 3766043

28.11.2012, 00:57. Показов 115357. Ответов 23
Метки (Все метки)

Ответ

Система плагинов для вашего приложения. Часть вторая.

Создаем проект с поддиректориями. Добавляем проект GUI – он будет считывать наш плагин. Добавляем в поддиректории – Библиотека С++. Выбираем «Динамическая библиотека». Назовем Test. Далее, далее, далее…
В библиотеке будет два файла *.h. Один из них будет оканчиваться *_global.h я его использую под интерфейс (в принципе как вам угодно). Интерфейс выглядит так:

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
33
34
35
36
37
38
39
40
41
42
#ifndef TEST_GLOBAL_H
#define TEST_GLOBAL_H
 
#include <QtPlugin>
 
// Предварительное обьявление класса
// (про методы он ничего не знает)
QT_BEGIN_NAMESPACE
class QAction;
QT_END_NAMESPACE
 
// Наследуем QObject
class Test : public QObject
{
    // Функции будут доступны
public:
    virtual QString getVersion()    = 0;
    virtual QString getName()       = 0;
    virtual QAction* getAction()    = 0;
 
    // Деструктор
    virtual ~Test() {}
 
    // Так обьявляем слот
public slots:
    // Будем переименовывать QAction
    virtual void slRenameAction(QString) = 0;
 
    // Ну и сигнал
signals:
    // Будем выводить сообщение для примера
    // В можете приспособить для своих нужд
    virtual void siSaveSetting(QString) = 0;
};
 
QT_BEGIN_NAMESPACE
    // Объявление этого класса как интерфейса для плагина
Q_DECLARE_INTERFACE(Test, "Test/Plagin/1.0")
 
QT_END_NAMESPACE
 
#endif // TEST_GLOBAL_H
Реализовываем наш плагин:
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
33
34
#ifndef TEST_H
#define TEST_H
 
#include "Test_global.h"
 
// Наследуем QObject
class TestClass : public Test
{
    // Макросы
    Q_OBJECT Q_INTERFACES(Test)
 
public:
    // Конструктор
    TestClass();
    // Наши виртуальные методы
    virtual QString getVersion()    { return "1.0"; }
    virtual QString getName()       { return "Test Plugin"; }
    virtual QAction* getAction()    { return action; }
 
    // Деструктор
    ~TestClass() {}
 
public slots:
    void slRenameAction(QString);
 
signals:
    void siSaveSetting(QString str = "SIGNAL emit");
 
private:
    // Добавим QAction
    QAction *action;
};
 
#endif // TEST_H
Так как мы используем QAction в *.pro файл добавим:
QT += gui

В *.cpp добавляем обязательно макрос ( добавлю, что макрос нужен в одном *.cpp. Если вы решите добавить еще файл он не нужен в нем)

В нашем случае:
C++ (Qt)
1
Q_EXPORT_PLUGIN(TestClass)
Файл реализации:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "test.h"
#include <QAction>
 
Q_EXPORT_PLUGIN(TestClass)
 
TestClass::TestClass(){
    // Создадим QAction
    action = new QAction(tr("Action TestPlugin"),this);
 
    // соединим наш action с нашим сигналом плагина
    connect(action,SIGNAL(triggered()),this,SIGNAL(siSaveSetting()));
}
 
// Реализация слота
void TestClass::slRenameAction(QString newName){
    action->setText(newName);
}
Добавим функцию чтения в проект с MainWindow и функция защиты если пригодится. Так же для проверки слота плагина добавим сигнал.
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
33
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QDebug>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;
 
private:
    // Укажем путь по умочанию
    void loadPlugins(QString pathPlugin = "../Test/debug");
    // Функция для контроля загрузки
    void controlLoadPlugin(QString);
 
signals:
    //  Сигнал с помощю него переименуем QAction плагина
    void renameAction(QString name = "new Text Action");
};
 
#endif // MAINWINDOW_H
В *.pro файл незабываем добавить include интерфейса. В нашем случае так:
INCLUDEPATH += $$PWD/../Test/

Реализация MainWindow:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
//-- Интерфейс плагина --//
#include "Test_global.h"
//-------------------------//
 
#include <QPluginLoader>
#include <QMessageBox>
#include <QMenu>
#include <QDir>
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // Функция чтения плагинов
    loadPlugins();
 
    // Подключим элементы для переименования
    connect(ui->pushButton,SIGNAL(clicked()),this,SIGNAL(renameAction()));
}
 
MainWindow::~MainWindow() { delete ui; }
 
void MainWindow::loadPlugins(QString pathPlugin) {
 
    #ifdef Q_OS_WIN32
        QString enlargement = ".dll";   // Для Windows
        QString prefix = "";
    #endif
 
    #ifdef Q_OS_LINUX
        QString enlargement = ".so";    // Для Linux
        QString prefix = "lib";         // В Linux добовляется приставка lib...
    #endif
 
    // Решил зделать загрузку именно поимени
    // Можно сделать это и рекурсивно...
    QStringList readPluginsName;
    readPluginsName << "Test";
 
    for(int i = 0; i < readPluginsName.size(); i++){
        QDir findPlugin(pathPlugin);
 
        if(findPlugin.entryList().contains(prefix + readPluginsName.at(i) + enlargement)){
            QPluginLoader loader(pathPlugin + "/" + prefix + readPluginsName.at(i) + enlargement);
 
            // Исключаем ошибки
            if (loader.isLoaded())
            {
                qDebug() << QString("%1: %2 %3.")
                            .arg("Plugin file")
                            .arg(readPluginsName.at(i))
                            .arg(QObject::tr("is already loaded"));
                continue;
            }
 
            // Исключаем ошибки
            if (loader.load() == false)
            {
                qDebug() << QString("%1 %2\n%3: %4")
                            .arg(QObject::tr("Can't load a plugin"))
                            .arg(readPluginsName.at(i)).arg(QObject::tr("error"))
                            .arg(loader.errorString());
            }
            else
            {
                // Если прочитан и все в порядке
                QObject * obj = loader.instance();
 
                if (Test * plugin = qobject_cast<Test *>(obj))
                {
                    // Применяем нащ плагин
                    ui->label->setText("Прочитан плагин\n"
                                       "Имя: " + plugin->getName() +", Версия: "
                                       + plugin->getVersion());
 
                    ui->menuBar->addAction(plugin->getAction());
 
                    connect(plugin,SIGNAL(siSaveSetting(QString)),ui->label,SLOT(setText(QString)));
                    connect(this,SIGNAL(renameAction(QString)),plugin,SLOT(slRenameAction(QString)));
                }
            }
        }
        else{
            // Эта функция делает невозможным загрузку приложения
            // если плагин не найден а он жизненно необходим :)
            controlLoadPlugin(readPluginsName.at(i));
        }
    }
}
 
// Эта функция делает невозможным загрузку приложения
// если плагин не найден а он жизненно необходим :)
void MainWindow::controlLoadPlugin(QString LoadPlugin){
 
    QStringList listFindPlugin;
    // Просто добавим в QStringList "Жизненно необходимые" плагины
    listFindPlugin << "Test";
 
    if(listFindPlugin.contains(LoadPlugin)){
        QMessageBox msgBox;
        msgBox.setIcon(QMessageBox::Critical);
        msgBox.setText(tr("Not found plugin: ") + LoadPlugin + tr("    \nРабота приложения не возможна"));
        msgBox.setStandardButtons(QMessageBox::Cancel);
        msgBox.exec();
 
        // Завершение приложения
        QMetaObject::invokeMethod(this, "close", Qt::QueuedConnection); // Завершение приложения
    }
}
Иногда Qt Creator бочинит. Все написано верно, проверенно сто раз и считывать плагин не хочет. Попробуйте изменить *.pro файл (допустить ошибку, а потом исправить) мне помогало

Вот, все работает:

Вопрос - Ответ для новичков по Qt


Пример приведенный здесь:

Вернуться к обсуждению:
Вопрос - Ответ для новичков по Qt C++ Qt
Вложения
Тип файла: zip PluginProject.zip (6.5 Кб, 94 просмотров)
4
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2012, 00:57
Готовые ответы и решения:

Есть вопрос не для новичков
я написал функцию которая содаёт динамически ДатаТайбл, но я определяю зарание известный класс, она...

Как реализовать приложение для тестирования (вопрос/ответ)
Всем привет, я пока что андроид лузер, начал писать програмку с тестами так как тестов планируется...

Создать функцию, принимающую вопрос для пользователя и правильный ответ
создать функцию checkQuestionAnswer, которая принимает в себя 2 параметра: question и...

вопрос-ответ
Возникло несколько вопросов(по мере возникновения буду добавлять новые). нет ответа 1) Поисковики...

Вопрос и ответ.
В данной теме каждый может задать вопрос и получить один ответ на него от меня. Дабы тема...

23
28.11.2012, 00:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2012, 00:57
Помогаю со студенческими работами здесь

Ответ на вопрос.
Всем здравствуйте. Предмет: Управление данными. Ответьте, пожалуйста, на вопрос: 98. Как можно...

Вопрос - ответ.
В этом топике я и многие другие опытные SEO мастера будут отвечать на ваши вопросы, дабы не...

Ответ на вопрос
Добрый день, я не могу понять зачем после того как залогинишся перед ответом (после нажатия...

Ответ на вопрос
Блин препод задал вопрос не знаю как ответить на него и почему такой ответ? вот вопрос: Какой...

Ответ на вопрос.
Вот задали мне с информатики написать програмку на паскале, чтобы она задавала вопрос, и...

Ответ на вопрос по С++
определение объединения (union), синтаксис, назначение спасибо

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru