Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[QT] sprawdzanie stanu checkboxa w QTableView

Ostatnio zmodyfikowano 2017-07-25 10:16
Autor Wiadomość
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.

C/C++
//usuwanie wierszy
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
C/C++
//dodawanie wierszy
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
P-163535
DejaVu
» 2017-07-24 18:03:49
https://forum.qt.io/topic​/25740/checkbox-in-qtableview/4
http://www.qtcentre.org​/threads​/43849-Checkboxes-in-QTableView-with-my-custom-model

a nie ma czegoś takiego jak getCheckState?
Skoro jest
setCheckState( Qt::Checked );
 to getter też powinien istnieć.


https://forum.qt.io/topic​/10591​/solved-get-value-of-checkbox-​in-a-qtableview​/5

Jeszcze to:
https://stackoverflow.com​/questions/15456856​/catch-qtablewidgetitem-check-state-change


C/C++
QCheckBox * checkBox = static_cast < QCheckBox *>( editor );
QString value;
if( checkBox->checkState() == Qt::Checked )
     value = "Y";
else
     value = "N";

P-163537
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#checkState

deleteCheckBox->isChecked();
 zwróci Ci true lub false w zależności od stanu,

P-163540
aaadam
Temat założony przez niniejszego użytkownika
» 2017-07-25 10:16:36
rozwiązanie :)

C/C++
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
P-163546
« 1 »
  Strona 1 z 1