Pergunta

Eu tenho dois processos que exange mensagens uns dos outros. Um processo é um (isto é, não-qt) programa normal, que envia mensagens para processo B. Processo B é uma aplicação QT GUI mostrando mensagens recebidas em uma caixa de texto.

Eu criei um widget personalizado (chamados ShowMessages) que herda de QPlainTextEdit e lê mensagens de uma tubulação quando um timer expirar, e acrescenta-los na caixa de texto. Código não é realmente concebido como este (o que seria muito ruim projeto que eu acho), mas é apenas para tornar as coisas simples aqui. Por razões que não vai contar, processo A não pode ser desligado enquanto eu estou criando o formulário usando qt-designer.

O problema é que, enquanto eu estou usando o Qt Designer (assim selecionando os ShowMessages widget e colocá-lo dentro da janela) o widget começa a mostrar mensagens, mesmo se eu estou no designer. Este recurso é legal, mas o problema é que quando eu salvar o formulário, já mensagens presentes são salvos no arquivo .ui, o que resulta em vez de comportamento ruim quando eu iniciar o processo B (porque o processo começa a mostrar mensagens que recebi durante a fase de criação) .

Eu poderia limpar a caixa de texto apenas após o início do processo B, mas eu acho que, para evitar mensagens para estar presente no arquivo .ui é muito melhor. O que eu quero é ser capaz de escrever código como este para o widget:

if <I'm not in the designer>
    timer = QtCore.QTimer(self)
    QtCore.QObject.connect(timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("on_timer()"));
    timer.start(2000)

Existe uma função qt saber se eu estou no designer? Você acha que a distinção entre designer e código de tempo de execução é "mau"?

(Desculpe por erros, mas o Inglês não é minha língua materna)

Foi útil?

Solução

Talvez o seu widget deve ter uma bandeira para se do "ativo" e padrão para tão falso, enquanto você está no designer, ele não faz nada. No código que você configurá-lo para ativa quando você quiser ver as mensagens. Então você também tem a capacidade de desligá-lo em outros cenários também.

Mas eu tenho que dizer, parece que você está colocando o código "controlador" em um widget "ver" o que pode e provavelmente irá significar problemas para você no caminho (incluindo o problema Qt Designer atual que você está tendo agora ).

Considere ler sobre o MVC (MVC) padrão de design, se você não tiver já.

Update:

Para ser justo, a sua pergunta pediu como detectar se você está no designer:)

http: // doc .trolltech.com / 4.3 / designer criando-custom-widgets.html # criando-bem-comportado-Widgets

Para dar personalizada Widgets especial comportamento em Qt Designer, fornecer uma aplicação da inicialização () função para configurar o widget processo de construção para o Qt Designer comportamento específico. Esta função ser chamado pela primeira vez antes todas as chamadas para createWidget () e poderia talvez definir um sinalizador interno que pode ser testado mais tarde, quando as chamadas Qt Designer função do plugin createWidget ().

De acordo com o documento, você basicamente pode definir o seu "inDesignerFlag" a verdade na função initialize () do widget. Em seguida, detectar essa bandeira sempre que necessário no código do seu widget.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top