crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Перенос проекта на другую машину, Ошибка линковки
Anticross
  опции профиля:
сообщение 17.4.2010, 10:40
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 31.3.2010
Пользователь №: 1579

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня есть полностью рабочий проект написанный в VS 2005 с ипользованием библиотеки QT. Он отлично компилится и звпускается, но когда я пинес его домой и запустил в той же VS 2005(Дома у меня среда тоже настроена и откомпилирована qt), при компиляции проэкта после запуска выдается ошибка:"ASSERT failure in QList<T>::operator[]: "index out of range",
file ../../include/QtCore/../../src/corelib/tools/qlist.h"

В чем может быть проблема и как ее правильно решить ? Пожалуйста помогите.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 17.4.2010, 10:50
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


На работе собираешь release, а дома debug?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anticross
  опции профиля:
сообщение 17.4.2010, 14:55
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 31.3.2010
Пользователь №: 1579

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 17.4.2010, 10:50) *
На работе собираешь release, а дома debug?

И на работе debug и дома тоже.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 17.4.2010, 14:57
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Ну тогда показывай как ты с QList работаешь... ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anticross
  опции профиля:
сообщение 17.4.2010, 15:13
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 31.3.2010
Пользователь №: 1579

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я использую QListWidget :
Раскрывающийся текст
contentsWidget = new QListWidget;
contentsWidget->setViewMode(QListView::IconMode);
contentsWidget->setIconSize(QSize(50, 50));
contentsWidget->setMovement(QListView::Static);
contentsWidget->setFixedSize(80,250);
contentsWidget->setSpacing(10);

#include <QtGui>
#include <QSettings>

#include "ConnectDialog.h"
#include "ConnectPanelUSB.h"
#include "ConnectPanelEthernet.h"
#include "ConnectPanelServer.h"

ConnectDialog::ConnectDialog(QWidget * parent): QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint)
{

    setModal(true);
    setWindowIcon(QPixmap("Icons\\plug.png"));
    setFixedSize(350,357);

    contentsWidget = new QListWidget;
    contentsWidget->setViewMode(QListView::IconMode);
    contentsWidget->setIconSize(QSize(50, 50));
    contentsWidget->setMovement(QListView::Static);
    contentsWidget->setFixedSize(80,250);
    contentsWidget->setSpacing(10);

    pagesWidget = new QStackedWidget;
    pagesWidget->addWidget(new ConnectPanelUSB);
    pagesWidget->addWidget(new ConnectPanelEthernet);
    pagesWidget->addWidget(new ConnectPanelServer);
    
    m_statusLabel = new QLabel;
    m_statusIcon = new QLabel;

    connect(pagesWidget->widget(0), SIGNAL(errorValidate(QString)),this, SLOT(onErrorValidate(QString)));
    connect(pagesWidget->widget(1), SIGNAL(errorValidate(QString)),this, SLOT(onErrorValidate(QString)));
    connect(pagesWidget->widget(2), SIGNAL(errorValidate(QString)),this, SLOT(onErrorValidate(QString)));

    QPushButton *buttonCancel = new QPushButton(tr("Cancel"));
    QPushButton *buttonOK = new QPushButton(tr("OK"));
    buttonOK->setDefault(true);

    createIcons();
    contentsWidget->setCurrentRow(0);

    connect(buttonCancel, SIGNAL(clicked()), this, SLOT(close()));

    connect(pagesWidget->widget(0), SIGNAL(validateOK()), this, SLOT(close()));
    connect(pagesWidget->widget(1), SIGNAL(validateOK()), this, SLOT(close()));
    connect(pagesWidget->widget(2), SIGNAL(validateOK()), this, SLOT(close()));

    connect(buttonOK, SIGNAL(clicked()), pagesWidget->widget(0), SLOT(onOK()));
    connect(buttonOK, SIGNAL(clicked()), pagesWidget->widget(1), SLOT(onOK()));
    connect(buttonOK, SIGNAL(clicked()), pagesWidget->widget(2), SLOT(onOK()));

    QHBoxLayout *horizontalLayout = new QHBoxLayout;
    horizontalLayout->addWidget(contentsWidget);
    horizontalLayout->addWidget(pagesWidget, 1);
    horizontalLayout->addStretch(1);

    QHBoxLayout *statusLayout = new QHBoxLayout;
    statusLayout->setAlignment(Qt::AlignLeft);
    statusLayout->addWidget(m_statusIcon);
    statusLayout->addWidget(m_statusLabel);

    QFrame * lineSeparator = new QFrame;
    lineSeparator->setFrameStyle(QFrame::HLine|QFrame::Sunken);

    QHBoxLayout *buttonsLayout = new QHBoxLayout;
    buttonsLayout->addStretch(1);
    buttonsLayout->addWidget(buttonOK);
    buttonsLayout->addWidget(buttonCancel);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(horizontalLayout);
    mainLayout->addStretch(1);
    mainLayout->addSpacing(12);
    mainLayout->addLayout(statusLayout);
    mainLayout->addWidget(lineSeparator);
    mainLayout->addLayout(buttonsLayout);
    setLayout(mainLayout);

    connect(pagesWidget->widget(0), SIGNAL(changeField()), this, SLOT(onChangeField()));
    connect(pagesWidget->widget(1), SIGNAL(changeField()), this, SLOT(onChangeField()));
    connect(pagesWidget->widget(2), SIGNAL(changeField()), this, SLOT(onChangeField()));

    setWindowTitle(tr("Connection"));
    readSettings();
}
void ConnectDialog::createIcons()
{
    QListWidgetItem *usb = new QListWidgetItem(contentsWidget);
    usb->setIcon(QPixmap("Icons\\usb.png"));
    usb->setText(tr("USB"));
    usb->setToolTip(tr("Connect to station via USB"));
    usb->setTextAlignment(Qt::AlignHCenter);
    usb->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

    QListWidgetItem *ethernet = new QListWidgetItem(contentsWidget);
    ethernet->setIcon(QPixmap("Icons\\ethernet.png"));
    ethernet->setText(tr("Ethernet"));
    ethernet->setToolTip(tr("Connect to station via Ethernet"));
    ethernet->setTextAlignment(Qt::AlignHCenter);
    ethernet->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

    QListWidgetItem *server = new QListWidgetItem(contentsWidget);
    server->setIcon(QPixmap("Icons\\server.png"));
    server->setText(tr("Server"));
    server->setToolTip(tr("Connect to station via Server"));
    server->setTextAlignment(Qt::AlignHCenter);
    server->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

    connect(contentsWidget,    SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
}
void ConnectDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous)
{
    if (!current)
        current = previous;

    pagesWidget->setCurrentIndex(contentsWidget->row(current));
}
void ConnectDialog::onErrorValidate(QString text)
{
    m_statusIcon->setPixmap(QPixmap("Icons\\warning.png"));
    m_statusLabel->setText(text);
}
void ConnectDialog::onChangeField()
{
    m_statusIcon->clear();
    m_statusLabel->clear();
}
void ConnectDialog::writeSettings()
{
    QSettings settings("Stalenergo", "ASSC-D");

    settings.setValue("ActivePanel",pagesWidget->currentIndex());
}
void ConnectDialog::readSettings()
{
    QSettings settings("Stalenergo", "ASSC-D");

    pagesWidget->setCurrentIndex(settings.value("ActivePanel").toInt());
    contentsWidget->setCurrentRow(settings.value("ActivePanel").toInt());
}
void ConnectDialog::closeEvent(QCloseEvent * event)
{
    writeSettings();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 17.4.2010, 15:29
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Не, ошибка происходит в объекте класса QList или его производных (типа QStringList).
С подобными типами ты работаешь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anticross
  опции профиля:
сообщение 17.4.2010, 15:35
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 31.3.2010
Пользователь №: 1579

Спасибо сказали: 0 раз(а)




Репутация:   0  


Может где то здесь:
Раскрывающийся текст
void ConnectPanelServer::readSettings()
{
    QSettings settings("Stalenergo", "ASSC-D");

    QString * connectionList = new QString(settings.value("/ServerConnection/ConnectionList").toString());

    QStringList listItem;

    listItem = connectionList->split(";");

    listItem.removeLast();
    listItem.removeDuplicates();

    /*for(int i=0;i<listItem.size();i++)
    {
        m_ipComboBox->addItem(listItem[i].split(":")[0]);        
    }*/
    m_ipComboBox->addItems(listItem);

    m_ipComboBox->setCurrentIndex(settings.value("/ServerConnection/ConnectionListIndex").toInt());


    /*m_ipAddresLineEdit->setText(settings.value("/ServerConnection/IpAddress/").toString());
    m_ipPortSpinBox->setValue(settings.value("/ServerConnection/IpPort/").toInt());
    m_ringSpinBox->setValue(settings.value("/ServerConnection/StationRing/").toInt());
    m_numberSpinBox->setValue(settings.value("/ServerConnection/StationNumber/").toInt());*/
}

Или здесь:
void ConnectPanelServer::parseConnectionList(int listItemIndex)
{
    QString connectionItem = m_ipComboBox->itemData(listItemIndex,0).toString();

    QStringList parcer = connectionItem.split(":");
    QString ip = parcer[0];
    parcer = parcer[1].split(",");
    QString port = parcer[0];
    parcer = parcer[1].split("-");
    QString ring = parcer[0];
    QString number = parcer[1];


    m_ipAddresLineEdit->setText(ip);
    m_ipPortSpinBox->setValue(port.toInt());
    m_numberSpinBox->setValue(number.toInt());
    m_ringSpinBox->setValue(ring.toInt());

    //QString IpAddress;
    //int IpPort,StationRing,StationNumber;

    //*int count = listIp->split(";").size();

    //while(count == 0)
    //{
    //    
    //}*/
    //    //parseConnectionList();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 17.4.2010, 15:43
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Проверь здесь:
void ConnectPanelServer::readSettings()
{
    ...
    m_ipComboBox->addItems(listItem);
    qDebug() << listItem.size();            // <<<<< количество элементов

    int index = settings.value("/ServerConnection/ConnectionListIndex").toInt();
    qDebug() << index;                    // <<<<< текущий индекс
    m_ipComboBox->setCurrentIndex( index );

    ...
}

Второе число должно быть меньше первого.

И здесь проверь, что находиться и как разделяется строка:
void ConnectPanelServer::parseConnectionList(int listItemIndex)
{
    QString connectionItem = m_ipComboBox->itemData(listItemIndex,0).toString();

    QStringList parcer = connectionItem.split(":");

    qDebug() << parcer;
    QString ip = parcer[0];
    parcer = parcer[1].split(",");

    qDebug() << parcer;
    QString port = parcer[0];
    parcer = parcer[1].split("-");

    qDebug() << parcer;
    QString ring = parcer[0];
    QString number = parcer[1];
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Anticross
  опции профиля:
сообщение 17.4.2010, 16:40
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 31.3.2010
Пользователь №: 1579

Спасибо сказали: 0 раз(а)




Репутация:   0  


QStringList parcer = connectionItem.split(":");
// QString ip = parcer[0];
// parcer = parcer[1].split(",");
// QString port = parcer[0];
// parcer = parcer[1].split("-");
// QString ring = parcer[0];
// QString number = parcer[1];

Все это писалось для того чтобы разбить строчку вида Qstring : int , int - int. Исходное значение типа Qstring(Целая неразделенная строка) приходит в эту функцию, которая и должна паристь.
На отдельные переменные Qstring ipName, int port, int ring, int number.
Говорят что можно это сделать используя регулярные выражения но я не знаю как.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.4.2010, 21:05
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Anticross @ 17.4.2010, 20:40) *
Все это писалось для того чтобы
неважно для чего писалось, проверяй всегда не вылазишь ли ты за допустимый диаппазон. ASSERT тебе явно говорит, что вылазишь:
Цитата(Anticross @ 17.4.2010, 14:40) *
ошибка:"ASSERT failure in QList<T>::operator[]: "index out of range",
а диаппазон всегда от 0 до QList<T>::size(), проверить не сложно

Anticross, по поводу оформления сообщений смотри тему: Справка по кнопкам и тэгам форума
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 16:03