[QT] sprawdzanie stanu checkboxa w QTableView
Ostatnio zmodyfikowano 2017-07-25 10:16
aaadam Temat założony przez niniejszego użytkownika |
[QT] sprawdzanie stanu checkboxa w QTableView » 2017-07-24 15:28:18 witam, mam problem ponieważ nie wiem jak porbać z QTableView czy dany checbox jest wciśnięty czy nie. prawie jestem u celu, ponieważ pobieram dane z komórki za pomocą tego kodu poniżej, ten kod działa dla zwykłych pól w których wprowadza się wartości. Niestety nie wiem jak sobie poradzić gdy znajduje się tam checkbox.A chcę dodać funkcjonalność jak wcisnę przycisk 'remove' to usuwaja mi się wszystkie wiersze, które mają zaznaczony checbox. private slots: void removeSelectedItems() { QString str = ""; str = ui->tv->model()->data( ui->tv->model()->index( 0, 3 ) ).toString(); }
odwołuje się po indeksie (0,3) w którym znajdue się checkbox a tak wygląda slot do dodawania nowego wiersza w QtableView private slots: void addNewItem() { QStandardItem * id = new QStandardItem(); QStandardItem * value = new QStandardItem(); QList < QStandardItem *> list { id, value }; tvModel.appendRow( list ); QPushButton * pbSend = new QPushButton( "Send" ); ui->tv->setIndexWidget( tvModel.index( tvModel.rowCount() - 1, 2 ), pbSend ); QWidget * deleteWidget = new QWidget(); QCheckBox * deleteCheckBox = new QCheckBox(); QHBoxLayout * deleteLayout = new QHBoxLayout( deleteWidget ); deleteLayout->addWidget( deleteCheckBox ); deleteLayout->setAlignment( Qt::AlignCenter ); deleteLayout->setContentsMargins( 0, 0, 0, 0 ); deleteWidget->setLayout( deleteLayout ); ui->tv->setIndexWidget( tvModel.index( tvModel.rowCount() - 1, tvModel.columnCount() - 1 ), deleteWidget ); connect( pbSend, & QPushButton::pressed, this,[ this, id, value ] { Q_Q( CanRawSender ); if( id->text().size() && value->text().size() ) { quint32 val; if( id->text().startsWith( "0x" ) ) val = id->text().toUInt( nullptr, 16 ); else val = id->text().toUInt( nullptr, 10 ); QCanBusFrame frame; frame.setFrameId( val ); frame.setPayload( QByteArray::fromHex( value->text().toUtf8() ) ); QVariant ctx = 0; emit q->sendFrame( frame, ctx ); } } ); }
proszę o pomoc |
|
DejaVu |
» 2017-07-24 18:03:49 |
|
maly7 |
» 2017-07-24 18:48:47 Na przyszłość, pierwsze co powinieneś zrobić to chociaż z grubsza przeglądnąć dokumentację. Akurat Qt ma bardzo przyjemną i wystarczy tylko rzucić okiem na metody, żeby wiedzieć czego będziesz potrzebował. http://doc.qt.io/qt-4.8/qcheckbox.html#checkStatedeleteCheckBox->isChecked(); zwróci Ci true lub false w zależności od stanu, |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2017-07-25 10:16:36 rozwiązanie :) QWidget * pw = ui->model->indexWidget( tvModel.index( i, 3 ) ); QCheckBox * pitem = qobject_cast < QCheckBox *>( pw->layout()->itemAt( 0 )->widget() ); std::cout << pitem->isChecked();
zamykam temat |
|
« 1 » |