Domanda

Ogni volta che utilizzo la finestra di dialogo Editor segnale / slot, devo scegliere dall'elenco esistente di slot. Quindi la domanda è: come posso creare uno slot personalizzato?

È stato utile?

Soluzione

Purtroppo questo non è possibile in Qt4.

In Qt3 è possibile creare slot personalizzati che sono stati poi implementati nel file ui.h. Tuttavia, Qt4 non utilizza questo file, quindi gli slot personalizzati non sono supportati.

C'è qualche discussione su questo problema su QtForum

Altri suggerimenti

Ciò sembra essere possibile nella versione di Qt Designer 4.5.2, ma impossibile può essere eseguito dal widget dock / Signal Editor dell'editor nella finestra principale.

Questo è ciò che ha funzionato per me

  1. Passa alla modalità Modifica segnali / slot (F4)
  2. Trascina e rilascia dal widget che deve emettere il segnale, al widget che deve ricevere il segnale.
  3. Viene visualizzata una finestra di dialogo Configura connessione , che mostra i segnali per il widget di emissione e gli slot per il widget di ricezione. Fai clic su Modifica ... sotto la colonna degli slot sulla destra.
  4. Viene visualizzata la finestra di dialogo Segnali / slot di ricezione . Qui è possibile fare clic sull'icona più sotto gli slot per aggiungere un nuovo slot con qualsiasi nome.
  5. Puoi quindi tornare indietro e connetterti al tuo nuovo slot nella finestra di dialogo Configura connessione , o in effetti nella Dockwidget Editor segnale / slot nella finestra principale.

Avvertenza: sto usando PyQt e ho provato a usare solo gli slot aggiunti in questo modo da Python, non da C ++, quindi il tuo chilometraggio può variare ...

fai clic con il pulsante destro del mouse sulla finestra principale e seleziona " cambia segnali e slot " e aggiungi un nuovo slot. Apparirà nel tuo editor di slot di segnale.

Sono in grado di farlo tramite:

In MainWindow.h, aggiungi la riga:

public slots:
     void example();

nella classe MainWindow.

In MainWindow.cpp

void MainWindow::example() {
     <code>
}

Questo non sembra essere possibile in modo semplice.

Il designer ti consente solo di promuovere i widget esistenti sui tuoi widget personalizzati. tuttavia non ti consente di collegare i segnali e gli slot della classe di widget promossi.

Il modo in cui ciò è possibile è la creazione di un plug-in per il designer come descritto qui e nelle pagine che seguono.

Il normale corso d'azione è quello di promuovere un widget per la propria classe e quindi collegarlo manualmente nel proprio codice. questo processo è descritto qui

Non è possibile farlo, perché significa che dovresti aggiungere uno slot a una classe Qt esistente come QPushButton che non è proprio la strada da percorrere.

Dovresti creare il tuo QWidget eventualmente subclassandone uno esistente. Quindi integrarlo in Qt Designer come plugin come suggerito. Avere la tua classe ti consente di aggiungere / modificare i segnali / slot disponibili come desideri.

Non dimenticare le funzionalità di connessione automatica dello slot. Ci sono alcuni svantaggi, come dover rinominare la tua funzione se rinomini il tuo widget, ma li usiamo molto nella mia azienda.

Puoi usare il formato slot magico di

void on_objectName_signal() {
// slot code here, where objectname is the Qt Designer object name
// and the signal is the emission
}

La connessione a questo metodo è stabilita dal metodo connectSlotsByName e ogni volta che viene emesso il segnale, questo slot viene invocato.

Forse ti aiuterà.

Per impostazione predefinita devi scegliere dall'elenco esistente di slot. Ma puoi aggiungere uno slot facendo clic con il pulsante destro del mouse sull'oggetto nell'elenco sul lato destro del progettista e scegliere " slot / signal " e aggiungi il tuo slot / segnale personalizzato. Successivamente, puoi sceglierlo nell'editor segnale / slot.

fai clic sul widget con il tasto destro

promuovi il widget in una classe che hai definito

fai di nuovo clic sul widget con il pulsante destro

vedrai che il segnale e lo slot sono modificabili

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top