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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с виджетами!  (Прочитано 7797 раз)
kadr
Гость
« : Октябрь 26, 2009, 20:50 »

Привет! Подскажите, вот возникла необходимость получить доступ к компанентам с одного выджета к другому, а если точнее- есть два поля, при двойном клике на строчке одного поля, вся строчка переноситься в другое поле, но перед этим открывается виджет на котором надо указать количество, которое присутсвует  в одном из столбцов переносимой строки, так вот надо что бы после того как введено нужное количество и нажата кнопка, во втором поле в колонке с количеством проставилось то количество которое было указано в виджете!
Как можно это все осуществить?  Непонимающий
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 26, 2009, 20:58 »

Что-то как-то расплывчато написано. Давай конкретнее с примерами.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Октябрь 26, 2009, 21:03 »

а если точнее- есть два поля, при двойном клике на строчке одного поля, вся строчка переноситься в другое поле

А если еще точнее? Чем представлены эти "поля"?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
kadr
Гость
« Ответ #3 : Октябрь 26, 2009, 21:29 »

Одним словом два поля QTableWidget с одинаковыми колонками (Название, количество, цена, производитель). Так вот в одном поле отображаются все товары, второе это типа корзины, в которое набирается товар. Так вот по двойному клику, товар - строчка челиком, а точнее каждая ячейка, переходит в дрогое поле:
QString kol;
     QWidget *tov = new tov_kol;
     tov->show();
     tov->setGeometry(500,400,400,103);
     tov->setFixedSize(99,48);
     //----------------------------------------------------------------------------------------------------
     ui->korzina->insertRow(kors);
     ui->korzina->setItem(kors,0, new QTableWidgetItem(ui->pole->item(ui->pole->currentRow(),0)->text()));
     ui->korzina->setItem(kors,1, new QTableWidgetItem(ui->pole->item(ui->pole->currentRow(),1)->text()));
    
     ui->korzina->setItem(kors,3, new QTableWidgetItem(ui->pole->item(ui->pole->currentRow(),3)->text()));
     ui->korzina->setItem(kors,4, new QTableWidgetItem(ui->pole->item(ui->pole->currentRow(),4)->text()));
    
     kors++;
После двойного клика открывается виджет под названием tov_kol, на котором есть 3 компонента: собственно label, splinBox и кнопка, после нажатия на которую должно происходить следующее:
1. Число из splinBox-а должно переходить во второе поле ui->korzina в колонку количество
2. виджет tov_kol закрывается!
Да и надо сделать как то чтобы пока он не закрылся, он не давал ничего больше делать, то есть постоянно находился в фокусе!
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Октябрь 26, 2009, 23:13 »

Цитировать
Да и надо сделать как то чтобы пока он не закрылся, он не давал ничего больше делать, то есть постоянно находился в фокусе!
Для этого используй void setWindowModality ( Qt::WindowModality windowModality )
Записан

Юра.
kadr
Гость
« Ответ #5 : Октябрь 27, 2009, 09:52 »

Цитировать
Да и надо сделать как то чтобы пока он не закрылся, он не давал ничего больше делать, то есть постоянно находился в фокусе!
Для этого используй void setWindowModality ( Qt::WindowModality windowModality )
Хорошо, с этим понятно, а главное то так и осталось без ответа, как мне получить доступ то к компанентам другого виджета?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Октябрь 27, 2009, 12:33 »

QWidget *tov = new tov_kol;
tov это QWidget или tov_kol?
Что-то у тебя все настолько нехорошо...
Как нужно:
Наследуешься от QWidget, раскидываешь нужные контролы и определяешь функции:
Код
C++ (Qt)
void setValue(int value) (spinBox->setValue(value);)
int value() {return spinBox->value();}
А потом к ним обращаешься.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kadr
Гость
« Ответ #7 : Октябрь 27, 2009, 16:36 »

tov это локальный идентификатор виджета, tov_kol, который я создал и добавил в проект.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Октябрь 27, 2009, 17:44 »

Как ты его создал? Как добавляешь в проект?
"Ничего не понимаю" (Братья пилоты)
Код
C++ (Qt)
QWidget *tov = new QWidget;
tov_kol *tov = new tov_kol;
 
Вот 2 варианта, которые могут быть, а у тебя вообще не пойми что.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kadr
Гость
« Ответ #9 : Октябрь 27, 2009, 19:51 »

Да я использую вот этот вариант QWidget *tov = new tov_kol; плюс я его подключаю через #include "tov_kol.h" вот.
Этот виджет открывается при двойном нажатии на любой строке в поле QTableWidget.

void MainWindow::on_pole_doubleClicked(QModelIndex index)
{
     QString kol;
     QWidget *tov = new tov_kol;
     tov->show();
     tov->setGeometry(500,400,400,103);
     tov->setFixedSize(99,48);
     //----------------------------------------------------------------------------------------------------
     ui->korzina->insertRow(kors);
     // qDebug() << ui->pole->item(ui->pole->currentRow(),0)->text();
     ui->korzina->setItem(kors,0, new QTableWidgetItem(ui->pole->item(ui->pole->currentRow(),0)->text()));
     ui->korzina->setItem(kors,1, new QTableWidgetItem(ui->pole->item(ui->pole->currentRow(),1)->text()));
     //ui->pole->setItem(row,2, new QTableWidgetItem(q.value(2).toString()));
     ui->korzina->setItem(kors,3, new QTableWidgetItem(ui->pole->item(ui->pole->currentRow(),3)->text()));
     ui->korzina->setItem(kors,4, new QTableWidgetItem(ui->pole->item(ui->pole->currentRow(),4)->text()));
     //ui->pole->setItem(row,5, new QTableWidgetItem(q.value(4).toString()));
     kors++;
     ui->kol->setText(kol.setNum(ui->korzina->rowCount()));
}
Надо что бы после нажатия на кнопку в виджете tov_kol, цифра из splinBox виджета tov_kol, заносилась в
ui->korzina->setItem(kors,1, new QTableWidgetItem("вот сюда"));
« Последнее редактирование: Октябрь 27, 2009, 20:00 от kadr » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Октябрь 28, 2009, 07:16 »

Я уже объяснил, вводишь в tov_kol поля value и setValue и через них работаешь. Что не понятно?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kadr
Гость
« Ответ #11 : Октябрь 28, 2009, 10:30 »

Я уже объяснил, вводишь в tov_kol поля value и setValue и через них работаешь. Что не понятно?
Блин я не понимаю как ей пользоваться в какую часть кода ее вставлять:

void setValue(int value) (kol_box->setValue(value))
    {
        int value();
        return kol_box->value();
    }
И как к ней потом обращаться с другого виджета?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Октябрь 28, 2009, 12:39 »

Ппц.
Код
C++ (Qt)
class MyWidget : public QWidget
{
private:
   QSpinBox *spinBox;
public:
   MyWidget(QWidget *parent) {
       spinBox = new QSpinBox(this);
       QVBoxLayout *layout = new QVBoxLayout();
       layout->addWidget(spinBox);
       setLayout(layout);
   }
 
   void setValue(int value) {spinBox->setValue(value);}
   void value() {return spinBox->value();}
};
 
Код
C++ (Qt)
void someFunction()
{
   myWidget = new MyWidget(this);
   myWidget->setValue(someValue);
   myWidget->show();
//=====================
   someValue = myWidget->value();
}
 
Если и сейчас не понятно, то я уже не знаю как дальше разжевывать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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