Tabela
Iremos utilizar o QListView para criar nossa tabela. Já que quando estiver lidando com dados mais complexos e multi-colunas, o widget QListView é mais adequado que o QListBox. O QListView pode ser exibir dados multi-colunas armazenado como uma lista ou uma estrutura em árvore. Cada coluna pode ter um cabeçalho que permite ordenar a lista pelo clique sobre ela. A figura abaixo mostra um exemplo da aplicação.
O widget listview é bastante complexo, por isso o exemplo é dividido em quatro partes, cada uma mostra uma aba diferente da aplicação exemplo. Nós começamos com o caso mais básico – uma lista simples com várias colunas. Isso é mostrado na aba com o título “List” mostrada na figura 13-3. O código que cria a listview é mostrado no exemplo abaixo:
QWidget *ListViewExample::setupListTab()
{
m_listView = new QListView();
m_listView->addColumn( "Foo" );
m_listView->addColumn( "Bar" );
m_listView->addColumn( "Baz" );
m_listView->setAllColumnsShowFocus( true );
new QListViewItem( m_listView, "(1, 1)", "(1, 2)", "(1, 3)" );
new QListViewItem( m_listView, "(2, 1)", "(2, 2)", "(2, 3)" );
new QListViewItem( m_listView, "(3, 1)", "(3, 2)", "(3, 3)" );
new QListViewItem( m_listView, "(4, 1)", "(4, 2)", "(4, 3)" );
return m_listView;
}
O código mostra os passos básicos necessários para usar a listview. Primeiro, algumas colunas são criadas. Depois, qualquer configuração especial é feita. Nesse caso, nos certificamos que a seleção é mostrada sobre toda a linha, e não sobre a primeira coluna somente. Finalmente, preenchemos a lista pela criação de um conjunto de QListBiewItems que referencem-se a listview como parent.
O widget listview é bastante complexo, por isso o exemplo é dividido em quatro partes, cada uma mostra uma aba diferente da aplicação exemplo. Nós começamos com o caso mais básico – uma lista simples com várias colunas. Isso é mostrado na aba com o título “List” mostrada na figura 13-3. O código que cria a listview é mostrado no exemplo abaixo:
QWidget *ListViewExample::setupListTab()
{
m_listView = new QListView();
m_listView->addColumn( "Foo" );
m_listView->addColumn( "Bar" );
m_listView->addColumn( "Baz" );
m_listView->setAllColumnsShowFocus( true );
new QListViewItem( m_listView, "(1, 1)", "(1, 2)", "(1, 3)" );
new QListViewItem( m_listView, "(2, 1)", "(2, 2)", "(2, 3)" );
new QListViewItem( m_listView, "(3, 1)", "(3, 2)", "(3, 3)" );
new QListViewItem( m_listView, "(4, 1)", "(4, 2)", "(4, 3)" );
return m_listView;
}
O segundo caso de uso é exibir os itens da listview em uma hierarquia de árvore. Isso é mostrado na aba com o titulo “Tree”. O código que cria a listview é mostrado no exemplo abaixo. Quando executar a aplicação exemplo, experimente clicar nos cabeçalhos da coluna para ordenar os itens. Observe que cada seção (A, B ou C) é ordenada separadamente.
QWidget *ListViewExample::setupTreeTab()
{
m_treeView = new QListView();
m_treeView->addColumn( "Tree" );
m_treeView->addColumn( "First" );
m_treeView->addColumn( "Second" );
m_treeView->addColumn( "Third" );
m_treeView->setRootIsDecorated( true );
QListViewItem *root = new QListViewItem( m_treeView, "root" );
QListViewItem *a = new QListViewItem( root, "A" );
QListViewItem *b = new QListViewItem( root, "B" );
QListViewItem *c = new QListViewItem( root, "C" );
new QListViewItem( a, "foo", "1", "2", "3" );
new QListViewItem( a, "bar", "i", "ii", "iii" );
new QListViewItem( a, "baz", "a", "b", "c" );
new QListViewItem( b, "foo", "1", "2", "3" );
new QListViewItem( b, "bar", "i", "ii", "iii" );
new QListViewItem( b, "baz", "a", "b", "c" );
new QListViewItem( c, "foo", "1", "2", "3" );
new QListViewItem( c, "bar", "i", "ii", "iii" );
new QListViewItem( c, "baz", "a", "b", "c" );
return m_treeView;
}
O código é estruturado da mesma forma que a lista básica. A diferença é que ao invés de usar um widget listview como parent para os itens, alguns itens possuem outros itens como parent. As razões para usar esse tipo de organização é fornecer um feedback para o usuário. Somente ver o item raiz não diz ao usuário que existem mais itens. O sinal de mais a direita do texto diz isso ao usuário.