Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vexar от Октябрь 29, 2009, 02:33



Название: QListWidget
Отправлено: vexar от Октябрь 29, 2009, 02:33
Подскажите, как мне из данной формы отправить сигнал на
открытие нового окна ? При выборе разных ОС должны открываться
разные окна.

Код

Код:
QListWidget * list = new QListWidget(0);

    QListWidgetItem * item = new QListWidgetItem;
    item->setText(trUtf8("Linux"));
    list->addItem(item);

    item = new QListWidgetItem;
    item->setText(trUtf8("Windows"));
    list->addItem(item);
   
    OkButton = new QPushButton(tr("ОК"));


Название: Re: QListWidget
Отправлено: DOOMer от Октябрь 29, 2009, 02:51
В слоте-обработчике клика по твоей кноаке "ОК" опеределяй какой итем в данный момент выбран. И в зависимости от этого грузи нужную тебе форму.

Код:
void YourClassName::on_OkButton_clicked()
{
     switch (list->currentItem())
     {
          case 0:
          {
                //  загрузка формы 1
                ....
                break;
          }   

          case 1:
          {
                //  загрузка формы 2
                ....
                break;
          }   
          default: // если ничего не ыбрано
          break;
     }
}


Название: Re: QListWidget
Отправлено: vexar от Октябрь 29, 2009, 07:19
Ругается на ошибку: в операторе switch задано не целое
Я так понел в switch должно быть числовое значение.
Или мож я не правельно значение item присваиваю?

Код:
QListWidget * list = new QListWidget;

    ItemLinux = new QListWidgetItem("1", list);
    ItemLinux->setText(trUtf8("Linux"));

    ItemWindow = new QListWidgetItem("2", list);
    ItemWindow->setText(trUtf8("Windows"));

    OkButton = new QPushButton(trUtf8("ОК"));
    connect(OkButton, SIGNAL(clicked()), this, SLOT(on_OkButton_clicked()));

void ChoiceDocDialog::on_OkButton_clicked()
{
     switch (list->currentItem())
     {
          case 1:    break;
          case 2:    break;

          default: ;// если ничего не ыбрано

     }
}


Название: Re: QListWidget
Отправлено: Пантер от Октябрь 29, 2009, 07:25
switch (list->currentItem()->text().toInt())


Название: Re: QListWidget
Отправлено: BRE от Октябрь 29, 2009, 07:37
Код
C++ (Qt)
switch( list->currentRow() )
{
case 0: ...
case 1: ...
default:
}  
 


Название: Re: QListWidget
Отправлено: vexar от Октябрь 29, 2009, 08:16
Спасибо, заработало. )))


Название: Re: QListWidget
Отправлено: pastor от Октябрь 29, 2009, 14:57
switch (list->currentItem()->text().toInt())

QString("Windows").toInt();
QString("Linux").toInt();

?

;)


Название: Re: QListWidget
Отправлено: Пантер от Октябрь 29, 2009, 18:04
switch (list->currentItem()->text().toInt())

QString("Windows").toInt();
QString("Linux").toInt();

?

;)
Посмотрел на ItemLinux = new QListWidgetItem("1", list), но не заметил ItemLinux->setText(trUtf8("Linux")); :)
Утром мозги еще не совсем адекватно все воспринимали, подумал, что у него в итемах циферки.


Название: Re: QListWidget
Отправлено: vexar от Ноябрь 17, 2009, 03:25
Как говорится рано обрадовался.  :-[

Заработало, но не правильно. Не могу понять в чем дело.
Если выбрать первый пункт(Linux) и нажать OK то в БД добавиться значение из  case 0 что и правельно, но
если выбрать второй пункт(Windows) то в БД запишется два раза значение из case 0

   
Код:
 list = new QListWidget;

    ItemLinux = new QListWidgetItem(list);
    ItemLinux->setText(trUtf8("Linux"));

    ItemWindow = new QListWidgetItem(list);
    ItemWindow->setText(trUtf8("Windows"));

    OkButton = new QPushButton(trUtf8("ОК"));
    connect(OkButton, SIGNAL(clicked()), this, SLOT(on_OkButton_clicked()));

void ChoiceDocDialog::on_OkButton_clicked()
{
    switch(list->currentItem()->text().toInt())
    {
         case 0: {QSqlQuery QueryOnline;
                QueryOnline.exec( "INSERT INTO `os` VALUES ('','Linux')" );} break;
         case 1: {QSqlQuery QueryOnline;
                    QueryOnline.exec( "INSERT INTO `os` VALUES ('','Windows')" );}   break;

         //default: ;// если ничего не ыбрано

     }

Куда подсунуть:
Код:
QString("Windows").toInt();
QString("Linux").toInt();
Что-то не допер.


Название: Re: QListWidget
Отправлено: Пантер от Ноябрь 17, 2009, 07:28
Не, это я немного ступил, когда писал. Нужно так:
Код:
    switch(list->currentRow())
    {
         case 0: {
              QSqlQuery QueryOnline;
              QueryOnline.exec( "INSERT INTO `os` VALUES ('','Linux')" );
              break;
              }
         case 1: {
              QSqlQuery QueryOnline;
              QueryOnline.exec( "INSERT INTO `os` VALUES ('','Windows')" );
              break;
              }
         //default: ;// если ничего не ыбрано

     }
Вот.


Название: Re: QListWidget
Отправлено: pastor от Ноябрь 17, 2009, 13:23
Куда подсунуть:
Что-то не допер.

Никуда. Это сообщение было адресовано Пантеру