| 
 Название: Исключение при присвоении строки QLabel
 Отправлено: Hellrider от Января 02, 2013,  15:10
 
 Не пойму почему происходит исключение, когда пытаюсь присвоить текст для QLabel. QLabel обьявлен в классе, потом в конструкторе создаю obj = new QLabel. Дальше в обьявленном слоте происхоит присваивание текста. Ну и когда присходит присваивание программа закрывается с ошибкой. Что я не так делаю?
 
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Alex Custov от Января 02, 2013,  15:15
 
 Пишешь неправильный код, который нужно скопировать сюда и показать. 
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Hellrider от Января 02, 2013,  15:24
 
 Тут поменял QLabel на QTextEdit. Если устанавливать текст в QTextEdit, то все устанавливается. Вот сам класс #ifndef DATAMAP_H#define DATAMAP_H
 #include <QtGui>
 
 class QPushButton;
 class QTextEdit;
 class QLineEdit;
 class DataMap : public QWidget
 {
 Q_OBJECT
 private:
 QMap<QString, QString>map;
 QMap<QString, QString>open_map;
 QLineEdit* pKey;
 QLineEdit* pText;
 QPushButton* pSave;
 QPushButton* pSaveData;
 QPushButton* pOpen;
 QTextEdit* txt;
 public:
 DataMap(QWidget* parent = 0);
 public slots:
 void slotSaveData();
 void slotSave();
 void slotOpen();
 };
 
 #endif // DATAMAP_H
 
 
конструктор DataMap::DataMap(QWidget* parent) : QWidget(parent){
 setFixedSize(500, 90);
 pKey = new QLineEdit;
 pText = new QLineEdit;
 pSave = new QPushButton("Save");
 pSaveData = new QPushButton("Save Data");
 pOpen = new QPushButton("Open");
 txt = new QTextEdit;
 
 QGridLayout* la = new QGridLayout;
 la->addWidget(pKey, 0, 0);
 la->addWidget(pText, 0, 1);
 la->addWidget(pSave, 0, 2);
 la->addWidget(pSaveData, 1, 0);
 la->addWidget(pOpen, 1, 1);
 la->addWidget(txt, 2, 0);
 setLayout(la);
 
 
 connect(pSave, SIGNAL(clicked()), SLOT(slotSave()));
 connect(pSaveData, SIGNAL(clicked()), SLOT(slotSaveData()));
 connect(pOpen, SIGNAL(clicked()), SLOT(slotOpen()));
 }
 
слот void DataMap::slotOpen(){QFile pFile("wh.dat");
 if(pFile.open(QIODevice::ReadOnly)){
 QDataStream stream(&pFile);
 stream >> open_map;
 } else QMessageBox::warning(0, "error", "Error open");
 pFile.close();
 if(open_map.isEmpty()){
 qDebug() << "map clean";
 } else qDebug() << "map full";
 QMap<QString, QString>::iterator it = open_map.find("A239");
 QString str = it.value();
 txt->setPlainText(str);
 }
 
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Alex Custov от Января 02, 2013,  15:29
 
 Код для установки текста правильный, тут падать не должно и для QLabel. Допиши в конец слота такой код вместо твоего после open_map.find(): C++ (Qt)QMap<QString, QString>::iterator it = open_map.find("A239"); 
 if(it == open_map.end())
 qDebug("Not found");
 else
 txt->setPlainText(it.value());
 
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Hellrider от Января 02, 2013,  15:35
 
 Код для установки текста правильный, тут падать не должно и для QLabel. Допиши в конец слота такой код вместо твоего после open_map.find(): C++ (Qt)QMap<QString, QString>::iterator it = open_map.find("A239"); 
 if(it == open_map.end())
 qDebug("Not found");
 else
 txt->setPlainText(it.value());
 
Все равно падает. 
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Old от Января 02, 2013,  15:51
 
 Все равно падает. 
 Ты бы показал весь код с QLabel.
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Hellrider от Января 02, 2013,  15:59
 
 Все равно падает. 
 Ты бы показал весь код с QLabel.void DataMap::slotSave(){QString str_key = pKey->text();
 QString str_text = pText->text();
 if(!map.contains(str_key)){
 map.insert(str_key, str_text);
 } else QMessageBox::warning(0, "error", "error12");
 pKey->setText("");
 pText->setText("");
 }
 
 void DataMap::slotSaveData(){
 QFile file("wh.dat");
 if(file.open(QIODevice::WriteOnly)){
 QDataStream stream(&file);
 stream << map;
 } else QMessageBox::warning(0, "error", "Error Write");
 file.close();
 }
 
Вот два слота которые не показал, но они отношения к этому не имеют. Больше ничего нету
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Hellrider от Января 02, 2013,  16:03
 
 Тут поменял QLabel на QTextEdit. Если устанавливать текст в QTextEdit, то все устанавливается. Вот сам класс #ifndef DATAMAP_H#define DATAMAP_H
 #include <QtGui>
 
 class QPushButton;
 class QTextEdit;
 class QLineEdit;
 class DataMap : public QWidget
 {
 Q_OBJECT
 private:
 QMap<QString, QString>map;
 QMap<QString, QString>open_map;
 QLineEdit* pKey;
 QLineEdit* pText;
 QPushButton* pSave;
 QPushButton* pSaveData;
 QPushButton* pOpen;
 QTextEdit* txt;
 public:
 DataMap(QWidget* parent = 0);
 public slots:
 void slotSaveData();
 void slotSave();
 void slotOpen();
 };
 
 #endif // DATAMAP_H
 
 
конструктор DataMap::DataMap(QWidget* parent) : QWidget(parent){
 setFixedSize(500, 90);
 pKey = new QLineEdit;
 pText = new QLineEdit;
 pSave = new QPushButton("Save");
 pSaveData = new QPushButton("Save Data");
 pOpen = new QPushButton("Open");
 txt = new QTextEdit;
 
 QGridLayout* la = new QGridLayout;
 la->addWidget(pKey, 0, 0);
 la->addWidget(pText, 0, 1);
 la->addWidget(pSave, 0, 2);
 la->addWidget(pSaveData, 1, 0);
 la->addWidget(pOpen, 1, 1);
 la->addWidget(txt, 2, 0);
 setLayout(la);
 
 
 connect(pSave, SIGNAL(clicked()), SLOT(slotSave()));
 connect(pSaveData, SIGNAL(clicked()), SLOT(slotSaveData()));
 connect(pOpen, SIGNAL(clicked()), SLOT(slotOpen()));
 }
 
слот void DataMap::slotOpen(){QFile pFile("wh.dat");
 if(pFile.open(QIODevice::ReadOnly)){
 QDataStream stream(&pFile);
 stream >> open_map;
 } else QMessageBox::warning(0, "error", "Error open");
 pFile.close();
 if(open_map.isEmpty()){
 qDebug() << "map clean";
 } else qDebug() << "map full";
 QMap<QString, QString>::iterator it = open_map.find("A239");
 QString str = it.value();
 txt->setPlainText(str);
 }
 
опечатался выше "Если устанавливать текст в  QTextEdit, то все устанавливается." - QLineEdit
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Old от Января 02, 2013,  16:04
 
 Вот два слота которые не показал, но они отношения к этому не имеют. Больше ничего нету
 Ты показал код с QTextEdit, который работает. Покажи тот код, который не работает. :)
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Hellrider от Января 02, 2013,  16:06
 
 Вот два слота которые не показал, но они отношения к этому не имеют. Больше ничего нету
 Ты показал код с QTextEdit, который работает. Покажи тот код, который не работает. :)В QLineEdit работает, а в QLabel и QTextEdit нет. Если устанавливать в самом конструкторе, то все везде устанавливается, но когда из слотов устанавливать - падает. Попробовал вызвать слот на прямую из конструктора без соединения сигнал-слот - Присваивается нормально. Не понимаю в чем проблема. ---------------------- Удалил мейк файлы и папку дебаг из проекта и о чудо - все заработало. Но как это связано все...
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Dancing_on_water от Января 03, 2013,  10:10
 
 А случаем не соединен ли сигнал со слотом через Qt::DirectConnection, а при этом эммитер живет в другом потоке?  
 Хотя скорее вопрос надо задать так, в каком потоке вызывается конструктор твоего виджета?
 
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Mikhail от Января 03, 2013,  11:12
 
 Приложи проект который не работает.Иначе тебе никто не подскажет
 
 Название: Re: Исключение при присвоении строки QLabel
 Отправлено: Old от Января 03, 2013,  11:14
 
 Так решилось же все. :)
 
 
 |