crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
edwardoid
  опции профиля:
сообщение 16.9.2008, 22:14
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


Помогите, расскажите как поместить кнопку, или использовать вместо очередного QTableWidgetItem обычную QPushButton??

Сообщение отредактировал Litkevich Yuriy - 2.2.2009, 13:30
Причина редактирования: исправлено название
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 16.9.2008, 23:37
Сообщение #2


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


О_о...
а есть разница здесь читать или в мануале?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 17.9.2008, 17:48
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


В мануале я не нашел это
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sploid
  опции профиля:
сообщение 18.9.2008, 11:58
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 26.2.2008
Из: Москва
Пользователь №: 106

Спасибо сказали: 10 раз(а)




Репутация:   1  


попробуй:
void QTableWidget::setCellWidget ( int row, int column, QWidget * widget )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 18.9.2008, 21:39
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


Еще маленькое уточнение. Как добавить везде в i-тый ROW по кнопочке, и чтоб когда нажимали я получал сигнал и мог узнать в каком Column было сделано это нажатие)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.9.2008, 22:21
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


можно попробывать виджету задавать objectName слот сделать один, а в нем разруливать по objectName

т.е. примерно так:
Вставляем
for (i,....)
{
QPushButton * btn = new QPushButton();
btn->setObjectName(i);
connect(btn, SIGNAL(clicked()), this, SLOT(MySlot()));
setCellWidget ( i, j, btn );
}


слот
MyClass::MySlot()
{
  QPushButton *click_btn = qobject_cast<Button *>(sender());
  QString name = click_btn->objectName();
  ...
  //что-то делаем с именем
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 20.9.2008, 20:42
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


Понимаешь проблема в том, что я пишу программу супермаркетов, т.е. я не знаю сколько полей будет в таблице, следовательно не знаю сколько кнопок будет там. Тем более нажимая на кнопки я должен удалить строку из таблицы с кнопкой...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.9.2008, 22:45
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(edwardoid @ 21.9.2008, 0:42) *
я не знаю сколько полей будет в таблице
поля - это столбцы.

Цитата(edwardoid @ 21.9.2008, 0:42) *
я должен удалить строку из таблицы с кнопкой
и в чем проблема?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 21.9.2008, 12:05
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

Спасибо сказали: 0 раз(а)




Репутация:   0  


1) после очередного прочтения штрих-кода появляется новая строка в таблице, с одной кнопкой, которая мне будет говорить к какой строке принадлежит кнопка.
2) проблема в том, что кнопке если дать обджект -наейм в виде номера стыроки, то после удаления одной строки нумерация будет нарушена
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.9.2008, 12:50
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


в таком случае тебе лучше использовать Модель-Представление-Делегат, и реализовать свой делегат.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sploid
  опции профиля:
сообщение 21.9.2008, 22:24
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 26.2.2008
Из: Москва
Пользователь №: 106

Спасибо сказали: 10 раз(а)




Репутация:   1  


edwardoid, ты усложняешь, Litkevich Yuriy, прав насчет именования объектов. Есть другой вариант реализации подобной схемы. Например делаешь свою кнопку:
class MyButton : public QPushButton
{
    Q_OBJECT
  public
    MyButton( const QString& button_id ) : m_button_id( button_id ){ };
    QString button_id( ) const { return m_button_id; };
  private:
    QString m_button_id;
};

далее в слоте:
MyClass::MySlot()
{
  MyButton *click_btn = qobject_cast<MyButton*>(sender());
  QString button_id = click_btn->button_id();
  //что-то делаем с идентификатором кнопки.
}


примерно так ( код не компилил, так что на баги ищи сам ).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NuQLe@R
  опции профиля:
сообщение 23.3.2009, 13:52
Сообщение #12


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 23.3.2009
Пользователь №: 632

Спасибо сказали: 0 раз(а)




Репутация:   0  


Чтобы не плодить темы, решил спросить тут.
Как проинициализировать виджет,вставленный в ячейку таблицы QWidgetTable?
В данном примере нужно задать Cell widget в виде выпадающего списка и записать в него comm_list.
QStringList comm_list=(QStringList() << ">" << "<"<< "v" <<"s" <<"?" <<"!");

        for (int i=0;i <= ui->tableWidget->rowCount(); i++)
        {

            ui->tableWidget->setCellWidget ( i, 0, new QComboBox );
            //ui->tableWidget->cellWidget(i,0)   ??? 
        }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.3.2009, 16:45
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(NuQLe@R @ 23.3.2009, 16:52) *
Как проинициализировать виджет,
создай динамически виджет, настрой его, а затем добавь:
QComboBox *w = new QComboBox();
w->foo(); // нужная функция
setCellWidget ( i, 0, w );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vanvo
  опции профиля:
сообщение 22.6.2010, 1:00
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 18.8.2008
Пользователь №: 267

Спасибо сказали: 0 раз(а)




Репутация:   0  


Решил новую тему не создавать, потому что вопрос похожий. В QTableWidget вставляю QDoubleSpinBox'ы. Не получается вытянуть из спинбоксов значения. Делаю вот что:
    for (int i=0; i<dimension; i++)
        tableProbability->setCellWidget(i, 0, new QDoubleSpinBox); 
...
double* probability = new double[numNode];
        for (int i = 0; i < numNode; i++)
        {
//            probability[i] = tableWidget->item(i,0)->data(Qt::EditRole).toDouble();
            QDoubleSpinBox *widget = qobject_cast<QDoubleSpinBox *>(tableWidget->cellWidget(i,0)); 
            probability[i] = widget->value();
        }

Компилируется нормально, но при выполнении вылетает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 22.6.2010, 7:31
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(vanvo @ 22.6.2010, 5:00) *
Компилируется нормально, но при выполнении вылетает.
хорошей привычкой является проверять указатель после qobject_cast, т.к., если приведение не удалось, то возвращается нуль.
Для отладки напиши так:
qDebug() << "Class in cell is" << tableWidget->cellWidget(i,0)->metaObject()->className();

и посмотри, что будет напечатано в консоли.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vanvo
  опции профиля:
сообщение 22.6.2010, 7:50
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 18.8.2008
Пользователь №: 267

Спасибо сказали: 0 раз(а)




Репутация:   0  


Litkevich Yuriy, возвращается null-указатель.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 22.6.2010, 7:54
Сообщение #17


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(vanvo @ 22.6.2010, 5:00) *
tableProbability->setCellWidget
Цитата(vanvo @ 22.6.2010, 5:00) *
tableWidget->cellWidget

судя по коду, устанавливаешь ячейку в одном виджете, а читаешь из другого
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vanvo
  опции профиля:
сообщение 22.6.2010, 8:10
Сообщение #18


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 18.8.2008
Пользователь №: 267

Спасибо сказали: 0 раз(а)




Репутация:   0  


Litkevich Yuriy, да, дело оказалось в этом. Надо же так просмотреть...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.6.2025, 19:30