Como preencher um combobox usando um Qvector



  • Pessoal,

    Preciso mais uma vez da ajuda de vocês, preciso preencher um combobox usando um vetor.
    Tenho uma tela em que o usuario digita os dados, esses dados são armazenados em um Qvector.
    Agora preciso preencher um combobox com os dados desse Qvector.
    Segue abaixo o código de preenchimento do Qvector:

    @QString IP;
    QTextCharFormat textFormat;
    IP = ui->Campo_Digitar_ip->text();
    IP += "\n";
    QTextCursor cursor(ui->textEdit->textCursor());
    cursor.insertText(IP);
    vetorIP.append(IP);@

    E como tentei até o momento preencher o combobox

    @while(vetorIP.operator !=(0))
    {
    ui->comboBox_IP_Cadastro->addItem(vetorIP);
    }@



  • Não entendí o seu "while".

    Não seria +- assim?

    @
    for (int i = 0; i < vetorIP.size(); ++i) {
    ui->comboBox_IP_Cadastro->addItem(vetorIP.at(i));
    }
    @

    Você poderia tentar usar o AddItens, mas ele recebe um QStringList e não um QVector.

    --



  • TioRoy,

    Foi teste mesmo, imaginei que estava errado mesmo o laço de repetição mas estava sem ideias de como fazer.

    Cara poderia me dar um exemplo de como faria para preencher com um QStringList? Pois quando estava testando não consegui incluir varios (neste caso) IPs em uma lista, somente um susbstituindo o outro.



  • Olá,

    Veja se esse exemplo se aplica ao seu caso:
    @
    // Use o seu combo já definido
    QComboBox *comboBox = new QComboBox;

    // C++11 compativel
    QStringList list = {
    "192.168.1.1" ,
    "192.168.1.2",
    "192.168.1.3"
    };

    // Insere a lista a partir do index 0 (zero)
    comboBox->insertItems(0,list);
    @

    Nota: Para compilar código C++11 coloque no seu arquivo .pro: @QMAKE_CXXFLAGS += -std=c++11@



  • Volnei,

    O problema que o corre é que fiz uma tela para o usuario digitar esses dados em um textEdit, dele quero jogar em um QStringList e depois jogar em um combobox por isso não dá para usar:

    @ // C++11 compativel
    QStringList list = {
    "192.168.1.1" ,
    "192.168.1.2",
    "192.168.1.3"
    };@



  • você usa algum separador? tipo espaço em branco ou virgulas?
    Se sim, pode fazer assim então:

    Presumo que o usuário irá digitar por no textEdit assim:

    192.168.1.1,192.168.1.2,192.168.1.3

    Fazer isso passar online para o combo não é um boa opção por questões do usuário
    poder errar e corrigir o texto. Então digamos que após ele terminar de digitar ele
    aperte um botão. Ok?

    @
    /* Na funcao membro que executa o código do botao
    codifique algo assim
    */
    QStringList list;

    /* O 'simplified' e para tirar espacoes em branco desnecessarios

    • o split(',') ira separar o texto assim com se digitasse assim:
    • list << "IP1" << "IP2" << "IP3" ... ;
    • Se o separador for outro caractér simplesmente troque-o.
    • Se for espaco em branco, tire o 'simplified()' use apenas o spli(' ')
      */
      list = textEdit->toPlainText().simplified().split(',');
      comboBox->clear(); // limpa antes de colocar os novos valores
      comboBox->insertItems(0,list);
      @


  • Ou se você quiser adicionar um item de cada vez:

    @
    QStringList list;

    list << "192.168.0.1";
    list << "192.168.0.2";
    list << "192.168.0.3";
    list << "192.168.0.4";

    @



  • Caras,

    Valeu mesmo pela ajuda mas para terminar como faria para acessar essa list em outra tela?

    Fiz o seguinte criei um .h com uma variavel extern e dela dento jogo os valores do list nesta variavel e tento capturar na outra tela. Tem o link do projeto aqui:

    https://docs.google.com/file/d/0BwQ4G9j5uY1JUzdfSFlrYTV5V2s/edit?usp=sharing



  • Bom dia lima_will,

    Procure não usar variáveis globais.
    Bem, você pode passar a sua QStringList como um parâmetro que está definido na classe da janela a ser chamada.
    Por exemplo:
    A classe da Ui a ser camada é incluir_ip() então na definição:
    @
    explicit incluir_ip(QWidget *parent = 0, QStringList list);
    @

    na mainwindow.cpp

    @
    void MainWindow::on_Button_IPS_clicked()
    {
    // ao invés disso
    incluir_ip ips;
    ips.exec();

    // use isso
    incluir_ip *ips = new incluir_ip(this, list);
    incluir_ip->show();
    }
    @

    Isso é apenas uma das várias técnicas existentes para isso.
    Mas eu acho que funcionará bem para você.



  • Bom dia Volneicp,

    Ontem a noite estava lendo sobre isso que não é aconselhavél usar variaveis globais. Mas cara ainda não deu certo mesmo com suas dicas, segue como está as classes:

    incluir_ip.h
    @#ifndef INCLUIR_IP_H
    #define INCLUIR_IP_H

    #include <QDialog>
    #include <QStringList>

    namespace Ui {
    class incluir_ip;
    }

    class incluir_ip : public QDialog
    {
    Q_OBJECT

    public:
    explicit incluir_ip(QWidget *parent = 0, QStringList list);

    ~incluir_ip();
    

    private slots:
    void on_Botao_incluir_ip_clicked();

    void on_Botao_voltar_ip_clicked();
    
    void on_Botao_incluir_clicked();
    

    private:
    Ui::incluir_ip *ui;
    };

    #endif // INCLUIR_IP_H@

    incluir_ip.cpp
    @#include "incluir_ip.h"
    #include "ui_incluir_ip.h"
    #include <QDebug>

    incluir_ip::incluir_ip(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::incluir_ip)
    {
    ui->setupUi(this);
    }

    incluir_ip::~incluir_ip()
    {
    delete ui;
    }

    void incluir_ip::on_Botao_incluir_ip_clicked()
    {

    }

    void incluir_ip::on_Botao_voltar_ip_clicked()
    {
    QStringList listas;

    listas = ui->textEdit->toPlainText().simplified().split(',');
    qDebug() << listas;
    close();
    

    }

    void incluir_ip::on_Botao_incluir_clicked()
    {
    QString IP;
    IP = ui->Campo_Digitar_ip->text();
    IP += ",";
    IP += "\n";
    QTextCursor cursor(ui->textEdit->textCursor());
    cursor.insertText(IP);
    ui->Campo_Digitar_ip->clear();
    }@

    mainwindows.cpp
    @#include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "incluir_ip.h"
    #include "Globais.h"

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);

    QStringList list;
    ui->comboBox_IPS->insertItems(0,list);
    

    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }

    void MainWindow::on_Button_IPS_clicked()
    {
    incluir_ip *ips = new incluir_ip(this, list);
    incluir_ip->show();
    }@

    A saida é a seguinte:

    @C:\Users\willian.toledo\Documents\QT\Duvida\incluir_ip.h:16: error: C2548: 'incluir_ip::incluir_ip' : missing default parameter for parameter 2
    C:\Users\willian.toledo\Documents\QT\Duvida\incluir_ip.cpp:7: error: C2511: 'incluir_ip::incluir_ip(QWidget *)' : overloaded member function not found in 'incluir_ip'
    c:\users\willian.toledo\documents\qt\duvida\incluir_ip.h:11: see declaration of 'incluir_ip'
    C:\Users\willian.toledo\Documents\QT\Duvida\incluir_ip.cpp:47: error: C1004: unexpected end-of-file found
    C:\Users\willian.toledo\Documents\QT\Duvida\incluir_ip.h:16: error: C2548: 'incluir_ip::incluir_ip' : missing default parameter for parameter 2
    C:\Users\willian.toledo\Documents\QT\Duvida\mainwindow.cpp:4: error: C1083: Cannot open include file: 'Globais.h': No such file or directory@

    Poderia me mostrar o que fiz de errado dessa vez? E muito grato pela ajuda!



  • Oi,

    Faz o seguinte: Compacta o seu projeto todo e me passa para eu testar aqui.
    Ai assim que der eu te aviso dos resultados.



  • Cara,

    Segue o link do projeto:

    https://docs.google.com/file/d/0BwQ4G9j5uY1JU2tvM1BDenpELXM/edit?usp=sharing

    Valeu mesmo pela ajuda!



  • Oi,

    Como eu posso devolver o código para você?



  • Volnei,

    Mandei um e-mail para vc daqui do forum com meu endereço de e-mail pessoal.

    Muito obrigado pela ajuda cara!!!!



  • Lima_will,

    Desculpe, você pode me enviar o endereço novamente?

    Obrigado


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.