[Qt-interest] How to remove itemsfrom QSqlTableModelvia QTableView
Sven Grunewaldt
strayer at olle-orks.org
Tue Apr 28 13:25:35 CEST 2009
Hi Tony,
No problem, according to the docs it should work ;)
I even found a very same looking function here:
https://svn.cscs.ch/pv-meshless/trunk/Qt/Components/pqColorPresetManager.cxx
I'm using Qt 4.5.1 with Visual Studio 2008 on Windows Vista.
Configure options:
---
-debug-and-release
-opensource
-no-qt3support
-no-vcproj
-no-dsp
-no-plugin-manifests
-no-style-plastique
-no-style-cleanlooks
-no-style-motif
-no-style-cde
-nomake demos
-nomake examples
-openssl
-I E:\Entwicklung\lib\openssl-0.9.8k\include
-L E:\Entwicklung\lib\openssl-0.9.8k\lib
---
I'll later check if this also fails with the Qt SDK.
Regards,
Sven Grunewaldt
Am 28.04.2009 02:27, schrieb Tony Rietwyk:
> Hi Sven,
> Sorry, I haven't done this myself - I was only relying on the docs to
> save you trouble later!
> It looks like a bug, which OS / QT versions are you using?
> Tony.
>
> *Sent:* Tuesday, 28 April 2009 05:06
> Hi,
>
> actually this doesn't seem to work and I again don't understand why ;)
>
> My function:
> ---
> void BerichteOrk::removeSelectedFromTableView(QTableView* view)
> {
> QAbstractItemModel* model = view->model();
>
> const QModelIndexList tmp =
> view->selectionModel()->selectedIndexes();
> QList<QPersistentModelIndex> indexes;
>
> for (int i = 0; i < tmp.size(); i++)
> {
> qDebug() << tmp.at(i).internalId() << tmp.at(i).isValid()
> << tmp.at(i).row();
> indexes.append(QPersistentModelIndex(tmp.at(i)));
> qDebug() << tmp.at(i).internalId() << tmp.at(i).isValid();
> }
> qDebug() << "";
> for (int i = 0; i < indexes.size(); i++)
> {
> qDebug() << indexes.at(i).internalId() <<
> indexes.at(i).isValid() << indexes.at(i).row();
> model->removeRow(indexes.at(i).row());
> qDebug() << indexes.at(i).internalId() <<
> indexes.at(i).isValid();
> }
>
> view->resizeColumnsToContents();
> view->resizeRowsToContents();
> view->horizontalHeader()->setStretchLastSection(true);
> }
> ---
>
> qDebug() output:
> ---
> 0 true 1
> 0 true
> 0 true 2
> 0 true
> 0 true 3
> 0 true
> 0 true 4
> 0 true
>
> 0 true 1
> 0 false
> 0 false -1
> 0 false
> 0 false -1
> 0 false
> 0 false -1
> 0 false
> ---
>
> As I understand the documentation this _should_ work...
>
> Regards,
> Sven Grunewaldt
>
> Am 27.04.2009 01:15, schrieb Tony Rietwyk:
>> Hi Sven,
>> Correct me if I'm wrong, but I don't think you should make any
>> assumptions about the order of the indexes returned from
>> selectedIndexes.
>> I suggest converting them to persistent indexes first, that way
>> subsequent indexes will get updated by the view as you delete them.
>> Hope that helps,
>> Tony.
>>
>> -----Original Message-----
>> *From:* qt-interest-bounces at trolltech.com
>> [mailto:qt-interest-bounces at trolltech.com] *On Behalf Of
>> *Sven Grunewaldt
>> *Sent:* Sunday, 26 April 2009 01:58
>> *To:* qt-interest at trolltech.com
>> *Subject:* Re: [Qt-interest] How to remove items from
>> QSqlTableModelvia QTableView
>>
>> Haha, oh god. I can't believe I didn't notice this... Thanks! :)
>> Sometimes you need another pair of eyes to see the obvious.
>>
>> Regards,
>> Sven Grunewaldt
>>
>> Am 25.04.2009 17:50, schrieb Scott Aron Bloom:
>>> Your algorithm fails for the same reason this algorithm fails:
>>>
>>> QList< int> values;
>>> //make a list where value[ ii ] == ii
>>> for( int ii = 0; ii< 10; ++ii )
>>> values<< ii;
>>>
>>>
>>> // remove value 3, 4, 5
>>> values.removeAt( 3 );
>>> values.removeAt( 4 );
>>> values.removeAt( 5 );
>>>
>>> // which actually removes 3,5 and 7 (I think... :) )
>>> The problem is, since you are removing index.row() 1 at a time, your row
>>> value will most likely NOT be valid after the remove.
>>>
>>>
>>> Scott
>>>
>>>
>>>
>>>> -----Original Message-----
>>>> From:qt-interest-bounces at trolltech.com [mailto:qt-interest-
>>>> bounces at trolltech.com] On Behalf Of Sven Grunewaldt
>>>> Sent: Saturday, April 25, 2009 8:31 AM
>>>> To:qt-interest at trolltech.com
>>>> Subject: [Qt-interest] How to remove items from QSqlTableModel via
>>>>
>>> QTableView
>>>
>>>> Hi,
>>>>
>>>> I have a QTableView which lies on top of a QSqlTableModel and a Button
>>>> to remove the currently selected rows. It seems that my implementation
>>>> of the buttons function does something wrong.
>>>> Sometimes not all selected items are removed and I just can't see why,
>>>> maybe someone finds my mistake:
>>>>
>>>> void BerichteOrk::on_removeSchuleButton_clicked()
>>>> {
>>>> const QModelIndexList tmp =
>>>> schuleView->selectionModel()->selectedIndexes();
>>>>
>>>> foreach (QModelIndex index, tmp)
>>>> {
>>>> schuleModel->removeRow(index.row());
>>>> }
>>>> }
>>>>
>>>> Regards,
>>>> Sven Grunewaldt
>>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20090428/4bbed41e/attachment.html
More information about the Qt-interest-old
mailing list