Análise de princípios básicos Qt QComboBox

Com relação a como o kernel QComboBox é implementado e como ele funciona, a análise é a seguinte:

QComboBox é uma janela herdada da reescrita do QWidget e a área 111 é implementada com o QLineEdit.O código-fonte é o seguinte:

QLineEdit * lineEdit () const ;

A zona 2 é criada com um botão de ferramenta semelhante ao que você pode usar para exibir eventos e alterar ícones

 

O evento da Zona 2 exibirá uma janela ListView associada, o kernel do sistema exibirá uma qlistview semelhante associada à janela, a qlistview associada usará a estrutura model-view-delegate

A listview responde aos eventos que são respondidos e manipula o processamento de dados associado à área 111,2.

Assim, o QComboBox pode ser transformado livremente em várias formas, como formas irregulares, como retângulos arredondados, e o componente lineEdit também pode ser substituído.No código-fonte, é possível ver que ele exclui o lineEdit padrão original e o substitui por um novo LineEdit O código fonte é o seguinte:

void QComboBox :: setLineEdit ( QLineEdit * edit )

{

。。。

    if ( editar == d -> lineEdit )

        retorno ;

 

    edit -> setText ( currentText ());

    excluir d -> lineEdit ;

 

d -> lineEdit = editar ;

。。。

}

Seu princípio de exibição de lista associado é semelhante, portanto pode ser transformado livremente e transformação independente,

Isso pode ser um bug

        auto aaa = novo QListView ();

        m_pComboBox -> setView ( aaa );

        aaa- > setStyleSheet ( "QAbstractItemView :: item {height: 35px;}" ); dessa forma, a altura do item pode ser definida com êxito,

Mas isso não vai funcionar, na verdade, o seu significado lógico deve ser o mesmo, todos são para modificar a visão

m_pComboBox -> view () -> setStyleSheet ( "QAbstractItemView :: item {height: 35px;}" );

Se você precisar tornar a interface do usuário mais complexa e mutável, poderá reescrever uma exibição de lista, desde que o efeito que a exibição de lista possa causar, o QComboBox possa fazê-lo.

 

Como a exibição de lista associada ao QComboBox deve ser independente, você pode desenhar livremente o efeito desejado, mas ainda existe uma certa associação.Quando definir a janela para um retângulo arredondado, geralmente de acordo com a ideia orientada a objeto, a exibição de lista correspondente deve ser configurada Pode ser um retângulo arredondado, mas o efeito não é particularmente ideal, como o seguinte código:

        m_pComboBox -> view () -> window () -> setWindowFlags ( Qt :: Popup | Qt :: FramelessWindowHint | Qt :: NoDropShadowWindowHint );

        m_pComboBox -> view () -> window () -> setAttribute ( Qt :: WA_TranslucentBackground );

        m_pComboBox -> view () -> setStyleSheet ( R "(

       QAbstractItemView {

      raio da borda: 14 px;

      cor de fundo: rgb (134.134.134);

      }

) " );

O efeito alcançou um retângulo arredondado, mas haverá uma sombra, mas o código possui NoDropShadowWindowHint e a sombra       foi removida, por isso parece um pouco ilógico aqui.Se você alterar o código para m_pComboBox / * -> view () * / -> setStyleSheet ( R "(

       QAbstractItemView {

      raio da borda: 14 px;

      cor de fundo: rgb (134.134.134);

      }

Pode alcançar o efeito desejado, não haverá sombra, porque foi removido, é lógico.

Supõe-se, grosso modo, que sua implementação subjacente pode ser que, ao usar a folha de estilo da vista interna, a função de desenho executada pela camada inferior seja apenas sua exibição de lista correspondente, mas essa camada inferior NoDropShadowWindowHint esteja relacionada à classe pai QComboBox, portanto Algumas ações de desenho não entram em vigor, porque nenhuma ação relacionada é executada em sua classe pai; portanto, o NoDropShadowWindowHint não entrará em vigor, portanto, o Qt tem suas próprias regras e rotinas; portanto, se você precisar desenhar no QComboBox, não use-o A sub-janela basicamente encapsulada correspondente, se você precisar desenhar, tente usar a própria classe QComboBox, não haverá problemas semelhantes.

 

 

 

Publicado 85 artigos originais · elogiou 18 · 120.000 visualizações

Acho que você gosta

Origin blog.csdn.net/a1317338022/article/details/105281272
Recomendado
Clasificación