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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QComboBox c повторами  (Прочитано 4175 раз)
Gomerd
Гость
« : Февраль 02, 2011, 13:29 »

Доброго времени суток, суть вопроса такова: как можно избавится от повторяющихся элементов в QComboBox'е, в справке не нашел ничего подходящего, неужели придется изобретать велосипед и писать проверку на повторы вручную?
Спасибо за внимание!
Записан
RedDog
Гость
« Ответ #1 : Февраль 02, 2011, 13:44 »

duplicatesEnabled : bool
This property holds whether the user can enter duplicate items into the combobox.

Note that it is always possible to programmatically insert duplicate items into the combobox.

By default, this property is false (duplicates are not allowed).

Access functions:

bool   duplicatesEnabled () const
void   setDuplicatesEnabled ( bool enable )
Записан
Gomerd
Гость
« Ответ #2 : Февраль 02, 2011, 13:47 »

Пробовал, ничего не происходит, как были повторы так они и остались
Записан
_govorilka
Гость
« Ответ #3 : Февраль 02, 2011, 13:48 »

Из справки к классу QComboBox
Цитировать
...
Note that it is always possible to programmatically insert duplicate items into the combobox.
By default, this property is false (duplicates are not allowed).
...

Если добавляешь программно, то проверку нужно делать самому.

QComboBox можно привязать к QAbstractItemModel, все остальные контроли тоже. Тогда проверку нужно будет написать один раз.


Записан
Gomerd
Гость
« Ответ #4 : Февраль 02, 2011, 13:49 »

вот так добавляю:
Код:
    QString fn = QFileDialog::getOpenFileName(this, tr("Open"));
    QFile file(fn);
    file.open(QFile::ReadOnly);
    QString line;
    QTextStream in(&file);
    QStringList string;
    while (!in.atEnd())
        {
            line = in.readLine();
            QString ch = ";";
            int l = 0;
            for (int i=0; i<line.length(); i++)
               {
                   if (line[i]==ch[0])
                      {
                         string<<line.mid(l,i-l);
                         ui->listWidget->addItem(line.mid(l,i-l));
                         l=i+1;
                      }
               }
            ui->comboBox->addItem(string[0]);
            qDebug()<<string;
            string.clear();
        }
Записан
_govorilka
Гость
« Ответ #5 : Февраль 02, 2011, 13:58 »

Код:
    QString fn = QFileDialog::getOpenFileName(this, tr("Open"));
    QFile file(fn);
    if(file.open(QFile::ReadOnly))
    {
        QString line;
        QTextStream in(&file);
        QStringList strings;
        while (!in.atEnd())
        {
            line = in.readLine();
            for(int i=0, l = 0; i < line.length(); i++)
            {
                if(line[i] == QChar(';'))
                {
                    QString string = line.mid(l,i-l);
                    if(!strings.contains(string))
                    {
                        strings.append(string);
                    }
                    ui->listWidget->addItem(string);
                    l=i+1;
                }
            }
        }
        ui->comboBox->addItems(strings);
    }

Попробуй так
Записан
Gomerd
Гость
« Ответ #6 : Февраль 02, 2011, 18:46 »

Код:
    QString fn = QFileDialog::getOpenFileName(this, tr("Open"));
    QFile file(fn);
    if(file.open(QFile::ReadOnly))
    {
        QString line;
        QTextStream in(&file);
        QStringList strings;
        while (!in.atEnd())
        {
            line = in.readLine();
            for(int i=0, l = 0; i < line.length(); i++)
            {
                if(line[i] == QChar(';'))
                {
                    QString string = line.mid(l,i-l);
                    if(!strings.contains(string))
                    {
                        strings.append(string);
                    }
                    ui->listWidget->addItem(string);
                    l=i+1;
                }
            }
        }
        ui->comboBox->addItems(strings);
    }

Попробуй так

все бы хорошо, но теперь он помещает в ComboBox все записи из .csv файла, а мне надо первую запись каждой строки ну ничего, тут додумаю. Спасибо)
Записан
_govorilka
Гость
« Ответ #7 : Февраль 03, 2011, 07:30 »

Если первый запись, то тогда как-то так:

Код:
    QString fn = QFileDialog::getOpenFileName(this, tr("Open"));
    QFile file(fn);
    if(file.open(QFile::ReadOnly))
    {
       QTextStream in(&file);
       QStringList strings;
       while (!in.atEnd())
       {
           QString line = in.readLine();

           int separator = line.indexOf(';');
           QString comboBoxString = (separator != -1 ? line.left(separator) : line);
           if(!strings.contains(comboBoxString))
           {
               strings.append(comboBoxString);
           };

           for(int i=0, l = 0; i < line.length(); i++)
           {
               if(line[i] == QChar())
               {
                   QString string = line.mid(l,i-l);
                   ui->listWidget->addItem(string);
                   l=i+1;
               }
           }

       }
       ui->comboBox->addItems(strings);
    }
Записан
Gomerd
Гость
« Ответ #8 : Февраль 03, 2011, 14:14 »

Сработало, большое спасибо за оперативную помощь)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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