Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ ComboBox

Автор: Cerberon 23.2.2011, 12:06

Цитата
void MainWindow::on_comboBox_currentIndexChanged(int index)

Что возвращает данное событие? Как нумеруется index? Есть список и соответсвенно позиции в нём нужно присваивать переменной значения, как узнать эту позицию?

Автор: panter_dsd 23.2.2011, 12:10

QVariant QComboBox::itemData ( int index, int role = Qt::UserRole ) const
Нумеруется как обычно от нуля.

Автор: Rocky 23.2.2011, 13:15

Цитата
Что возвращает данное событие?

Это не событие. Это слот сигнала. void ничего не возвращает.

Цитата
Как нумеруется index?

Айтемы в комбобоксе нумеруются от 0 как и сказал panter_dsd. Только в данном случае приходит индекс того элемента, который является текущим в комбобоксе.

Цитата
Есть список и соответсвенно позиции в нём нужно присваивать переменной значения

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

Автор: Cerberon 23.2.2011, 17:13

Выучи падежи и поймёшь.

Автор: Litkevich Yuriy 23.2.2011, 17:17

Cerberon, давай развёрнутое пояснение своей фразе:

Цитата(Cerberon @ 23.2.2011, 14:06) *
Есть список и соответсвенно позиции в нём нужно присваивать переменной значения
с падежами и так далее, чтобы и я понял её значение.

Автор: RazrFalcon 23.2.2011, 18:23

Цитата(Cerberon @ 23.2.2011, 11:06) *
Что возвращает данное событие?
Позицию, начиная с 0, текущего значения комбобокса.
Выбрали 3-й пункт, название не важно, index=2.

Цитата(Cerberon @ 23.2.2011, 11:06) *
Есть список и соответсвенно позиции в нём нужно присваивать переменной значения, как узнать эту позицию?
Непереваримо... Заполняем так, к примеру:
QStringList list;
list<<"One"<<"Two"<<"Three";
comboBox->addItems(list);

Автор: Rocky 24.2.2011, 8:46

Цитата(Cerberon @ 23.2.2011, 17:13) *
Выучи падежи и поймёшь.

Ну, видимо, нам всем нужно выучить падежи чтобы тебе помочь. Или срочно в телепатов переквалифицироваться.

Автор: Cerberon 27.2.2011, 10:53

Есть ComboBox, когда выбран элемент, нужно получить его номер, чтобы затем поставить его в условие if. Например:

if (index = 1) {
        QString str = "One";
    }


Автор: RazrFalcon 27.2.2011, 11:36

void MainWindow::comboBox_currentIndexChanged(int index)
{
if (index = 1) {
QString str = "One";
}
}


или

void MainWindow::order_comboBox_currentIndexChanged(QString name)
{
QString str = name;
}


ПКМ по комбобоксу в дизайнере - слоты - ищем там выше приведенные.

Автор: Cerberon 27.2.2011, 15:15

Да. Вот мой код:

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    if (index = 1)
    {
        QString str = "One";
    }
}


void MainWindow::on_pushButton_2_clicked()
{
     ui->textEdit->insertPlainText(str);
}

Но значение переменной str не меняется.

Автор: Litkevich Yuriy 27.2.2011, 16:16

Цитата(Cerberon @ 27.2.2011, 17:15) *
Но значение переменной str не меняется.
какой именно?
той что локальная в функции void MainWindow::on_comboBox_currentIndexChanged(int index) или той, что член класса?

Автор: Cerberon 27.2.2011, 19:11

В смысле член класса, хочешь сказать это две разные переменные?
В начале кода объявлена так:

QString str;

Автор: Litkevich Yuriy 27.2.2011, 20:09

Цитата(Cerberon @ 27.2.2011, 21:11) *
В начале кода
что значит в начале кода?

Я вижу :
void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    if (index = 1)
    {
        QString str = "One"; // объявлена переменная внутри блока if
    }
}


И
void MainWindow::on_pushButton_2_clicked()
{
     ui->textEdit->insertPlainText(str); // используется переменная str, на которую компилятор не будет ругаться только если она член класса MainWindow
}

Автор: Cerberon 27.2.2011, 20:43

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
QString str;

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    if (index = 1) {
        QString str = "One";
    }
}

void MainWindow::on_pushButton_2_clicked()
{

     ui->textEdit->insertPlainText(str);

}

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

Автор: Litkevich Yuriy 27.2.2011, 20:59

Cerberon, да ты оригинал.
Сделай переменную str членом класса (запиши её в объявлении класса). В функции MainWindow::on_comboBox_currentIndexChanged убери объявление (текст QString). Тогда будешь работать с одной переменной

Автор: Rocky 27.2.2011, 22:53

А вот в строке

if (index = 1)

ничего не смущает? ;)

Автор: Cerberon 28.2.2011, 12:43

if ((index == 1))

Автор: Litkevich Yuriy 28.2.2011, 17:44

Cerberon, двойные скобки не нужно.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)