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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Конструкторы копий в Qt  (Прочитано 6862 раз)
BuRn
Гость
« : Апрель 23, 2013, 22:35 »

Что за специфичные особенности у них ? Уже который день сижу и не пнимаю в чем проблема , есть класс :
Код:
namespace Ui {
    class qtPMK;
}

class qtPMK : public QMainWindow
{
    Q_OBJECT

public:
    explicit qtPMK(QWidget *parent = 0);
    ~qtPMK();
    Q_INVOKABLE void GoInSystem(QString,QString);
    Q_INVOKABLE QVariantMap GetCategoryes();
    Q_INVOKABLE int GetWidth(){
        return QApplication::desktop()->width();
    }
    Q_INVOKABLE int GetHeight(){
        return QApplication::desktop()->height();
    }
    Q_INVOKABLE void createOrder();

private slots:
    void authorized();
    void showMessageBox(const Error &e);

    void on_lineEditAuthEnterPassword_returnPressed();
private:
    enum { AUTH, CULINARY, SHOP, SYSTEM };
    DriverKkm *kassa;
    QRegExpValidator *passwordValidator;
    QDeclarativeView *ui;
    Config config;
    Cashier cashier;

    OrderSaver currentOrder;
    QList<Order*> orders;
    Module::DB::Abstract *db;
    Module::Auth::LoginPassword *loginPasswordAuth;
    QObject *Root;//корневой элемент QML модели
    void installValidators();
    void installData();
    void installSignalSlots();
};
В конструкторе этого класс читаю конфиг , высовываю с него данные порта кассы и пытаюсь передать в конструктор ккм, который выглядит так :
Код:
DriverKkm::DriverKkm(QString port,KKM type,QByteArray passwordBytes)
{
    switch(type)
    {
        case FPRINT5200: kkm = new Fprint5200(port,passwordBytes);break;
    }
}
Вызывается конструктор так :
Код:
QString kkm_port = config.getOption<QString>("kkm_port");
kassa = new DriverKkm(kkm_port,FPRINT5200);
Почему не отрабатывает конструктор копий стрингов и QByteArray, т.е. в конструкторе DriverKkm, отладчик показывает что переменная port недоступна, т.е. корректно передать не удается. Думал проблема в моем классе, создал обычный тестовый класс, конструктор которого принимает QString и выводит его через QDebug()<<str; ситуация аналогичная
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Апрель 23, 2013, 23:55 »

лично мне не понятно вообще ничего. где тестовый пример?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #2 : Апрель 24, 2013, 06:02 »

Burn, не в обиде будет сказано, но коды первый второй и третий, похожи только буквами алфавита.

Ничего не понятно.
Записан
BuRn
Гость
« Ответ #3 : Апрель 24, 2013, 07:32 »

Не понятно что не понятно...
В конструкторе qtPMK я создаю объект кассы, кода под рукой нет, но выглядит это примерно так :
Код:
qtPMK::qtPMK
{
QString kkm_port = config.getOption<QString>("kkm_port");
kassa = new DriverKkm(kkm_port,FPRINT5200);// либо можно вообще так kassa = new DriverKkm("/dev/ttyUSB0",FPRINT5200);
}
ставлю точку останова на строку с kassa = new DriverKkm(kkm_port,FPRINT5200);, захожу в конструктор под отладчиком и вижу что в конструкторе DriverKkm переменная port, в которую я передал строку, не содержит :/dev/ttyUSB0. Вариант 2:
Код:
class Test{
Test(){}
Test(QString str){
QDebug()<<str;
}
};
qtPMK::qtPMK
{
Test *testOut = new Test("Hello");
}
QDebug выводит пустую строку
Записан
Bepec
Гость
« Ответ #4 : Апрель 24, 2013, 07:57 »

Примерный код с примерной ошибкой с примерными переменными. Проверьте существование её ДО передачи в конструктор и после конструктора.
Записан
BuRn
Гость
« Ответ #5 : Апрель 24, 2013, 09:02 »

explicit конструктора qtPMK повлиять на данную проблему никак не может ?
Записан
Bepec
Гость
« Ответ #6 : Апрель 24, 2013, 09:17 »

Не более того, что может быть у вас в конструкторе строка обнуляется.
Записан
BuRn
Гость
« Ответ #7 : Апрель 24, 2013, 09:57 »

http://zalil.ru/34461990
Даже в этих 10 строчках qDebug() не выводит строку
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Апрель 24, 2013, 11:11 »

Starting D:\Programming\Qt\untitled2-build-4_8_4_msvs2012_x86-Debug\debug\untitled2.exe...
"HELLO"
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
BuRn
Гость
« Ответ #9 : Апрель 24, 2013, 11:42 »

Starting D:\Programming\Qt\untitled2-build-4_8_4_msvs2012_x86-Debug\debug\untitled2.exe...
"HELLO"
Есть предположения почему у меня может не отрабатывать ?
Записан
andrek
Гость
« Ответ #10 : Апрель 25, 2013, 13:54 »

CONFIG += console
Записан
thechicho
Гость
« Ответ #11 : Апрель 28, 2013, 22:03 »

а ты в чем пишешь?
как это собирается у тебя вообще QDebug()<<str;
так же нужно qDebug() << str;

DriverKkm::DriverKkm(QString port,KKM type,QByteArray passwordBytes)
kassa = new DriverKkm(kkm_port,FPRINT5200);

passwordBytes в объявлении функции равно QByteArray()?
KKM это перечисление в котором есть член FPRINT5200?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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