Russian Qt Forum

Qt => Общие вопросы => Тема начата: BuRn от Апрель 23, 2013, 22:35



Название: Конструкторы копий в Qt
Отправлено: 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; ситуация аналогичная


Название: Re: Конструкторы копий в Qt
Отправлено: kambala от Апрель 23, 2013, 23:55
лично мне не понятно вообще ничего. где тестовый пример?


Название: Re: Конструкторы копий в Qt
Отправлено: Bepec от Апрель 24, 2013, 06:02
Burn, не в обиде будет сказано, но коды первый второй и третий, похожи только буквами алфавита.

Ничего не понятно.


Название: Re: Конструкторы копий в Qt
Отправлено: BuRn от Апрель 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 выводит пустую строку


Название: Re: Конструкторы копий в Qt
Отправлено: Bepec от Апрель 24, 2013, 07:57
Примерный код с примерной ошибкой с примерными переменными. Проверьте существование её ДО передачи в конструктор и после конструктора.


Название: Re: Конструкторы копий в Qt
Отправлено: BuRn от Апрель 24, 2013, 09:02
explicit конструктора qtPMK повлиять на данную проблему никак не может ?


Название: Re: Конструкторы копий в Qt
Отправлено: Bepec от Апрель 24, 2013, 09:17
Не более того, что может быть у вас в конструкторе строка обнуляется.


Название: Re: Конструкторы копий в Qt
Отправлено: BuRn от Апрель 24, 2013, 09:57
http://zalil.ru/34461990
Даже в этих 10 строчках qDebug() не выводит строку


Название: Re: Конструкторы копий в Qt
Отправлено: kambala от Апрель 24, 2013, 11:11
Starting D:\Programming\Qt\untitled2-build-4_8_4_msvs2012_x86-Debug\debug\untitled2.exe...
"HELLO"


Название: Re: Конструкторы копий в Qt
Отправлено: BuRn от Апрель 24, 2013, 11:42
Starting D:\Programming\Qt\untitled2-build-4_8_4_msvs2012_x86-Debug\debug\untitled2.exe...
"HELLO"
Есть предположения почему у меня может не отрабатывать ?


Название: Re: Конструкторы копий в Qt
Отправлено: andrek от Апрель 25, 2013, 13:54
CONFIG += console


Название: Re: Конструкторы копий в Qt
Отправлено: thechicho от Апрель 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?