crossplatform.ru

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

> Наследование от QComboBox
AntonH851
  опции профиля:
сообщение 23.3.2010, 16:13
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 20.2.2010
Из: Шебекино
Пользователь №: 1475

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




Репутация:   0  


Добрый день!

Написал наследника QComboBox

class SqlComboBox : public QComboBox
{
    Q_OBJECT

public:
    SqlComboBox(QWidget *parent = 0);
    bool checkComboText();

    int column;

signals:
    void insertItemSignal(QString text);
    void editingFinished();

protected:
    void keyPressEvent(QKeyEvent *e);

};

SqlComboBox::SqlComboBox(QWidget *parent)
    : QComboBox(parent)
{

}

void SqlComboBox::keyPressEvent(QKeyEvent *e)
{
    if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
        if (this->checkComboText())
            emit editingFinished();
    } else
        QComboBox::keyPressEvent(e);
}

bool SqlComboBox::checkComboText()
{
    if (!lineEdit()->text().isEmpty()) {
        const int index =
                findText(lineEdit()->text(), Qt::MatchFlags());
        if (index == -1) {
            const int answer =
                    QMessageBox::question(this, "Новый элемент",
                                          "Добавить \"" +
                                          lineEdit()->text() +
                                          "\" в список?",
                                          QMessageBox::Yes | QMessageBox::No);
            if (answer == QMessageBox::Yes)
            {
                emit insertItemSignal(lineEdit()->text());
            }
            this->lineEdit()->setFocus();
            this->lineEdit()->selectAll();
            return false;
        } else {
            return true;
        }
    } else
        return false;

    return false;
}


в методе checkComboText на строчке
 if (!lineEdit()->text().isEmpty()) {

вылетает ошибка


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


Как я понимаю указатель на lineEdit пустой... а вот почему он пустой?


В каких случаях он будет возвращать корректный указатель на lineEdit?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 23.3.2010, 16:27
Сообщение #2


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

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

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




Репутация:   94  


Цитата(AntonH851 @ 23.3.2010, 19:13) *
Как я понимаю указатель на lineEdit пустой... а вот почему он пустой?
В каких случаях он будет возвращать корректный указатель на lineEdit?
Однако в асистенте написано:
Цитата
QLineEdit * QComboBox::lineEdit () const
Returns the line edit used to edit items in the combobox, or 0 if there is no line edit.

Only editable combo boxes have a line edit.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonH851
  опции профиля:
сообщение 23.3.2010, 16:49
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 20.2.2010
Из: Шебекино
Пользователь №: 1475

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




Репутация:   0  


С этим разобрался. Спасибо!

Теперь проблема с этой строчкой
const int answer =
                    QMessageBox::question(this, "Новый элемент",
                                          "Добавить \"" +
                                          lineEdit()->text() +
                                          "\" в список?",
                                          QMessageBox::Yes | QMessageBox::No);


Причем отладчик сначала останавливается в файле qlist.h на этом месте:

Q_OUTOFLINE_TEMPLATE QList<T>::~QList()
{
    if (d && !d->ref.deref())
        free(d);
}


а если продолжить отладку то в файле qmessagebox.cpp

QAbstractButton *QMessageBox::clickedButton() const
{
    Q_D(const QMessageBox);
    return d->clickedButton;
}


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

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 22.12.2024, 9:51