wlasny slot w qt creator

0

tworze sobie projekt gui w qt creator, w nim uruchamim designer i robie sobie przyciski, teraz chce dopisac wlasny slot, jak to zrobic?

pliku *.ui nie moge przeciez edytowac jak kodu ?

z gory dzieki za pomoc

0

slot definiujesz w klasie widgetu. Łączysz go również tam lub przy pomocy designera w QtCreatorze.

0

ok, w klasie widgetu stworzylem slot
i gdy wracam do designera to w liscie dostepnych slotow, nie ma tam tego mojego

0

Bo musisz go tam dodać. Masz tam button z '+'.

0

sorry, najsampierw edit potem ten plusik.

0

no po klinieciu + moge dodac sygnal, slot i elementy na ktore one dzialaja

ale po rozwinieciu listy dostepnych slotow, dalej sa tylko te "fabryczne"

0

jakie edit, gdzie ono jest ?

0

jak nie potrafisz przez designera to połącz connect'em w konstruktorze :]

0

zwróć uwagę, że w okienku gdzie wybierasz slot masz button edit ... w nim również możesz dodać swój slot. Poczytaj sobie dokładniej o QtCreatorze.

0

zaraz chyba wroce do kodzenia, a nie bede sobie utrudnial zycie tym designerem...

brak dostepu do kodu pliku *.uj na moje oko strasznie zaciemnia projekt

w ten sposob dodac ?
chyba cos zle bo nie dziala

 
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->pushButton,SIGNAL(clicked()), this, SIGNAL(kolor()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::kolor()
{
    ui->pushButton->setText("W");
}
0
connect(ui->pushButton,SIGNAL(clicked()), this, SIGNAL(kolor()));

to kolor w końcu jest slotem czy sygnałem ?

0

ok, dziala

ale czy to nie brzydko troche robic tego connecta tu w konstruktorze ?

0

czemu brzydko? Chcesz to stwórz sobie osobną metodę do connect'ów ale nie wydaje mi się to specjalnie potrzebne. Rozwiązanie z connect'em w klasie ma tą zaletę, że przeglądając kod klasy widzisz z czym jest połączony slot bądź sygnał bez zaglądania w designera. Jeśli jednak cie razi w oczy to zrób to designerem tak jak na filmiku, który podlinkowałem :]

0

ok, choc moj designer jest troche nowszy i jakos mimo ze zrobilem podobnie to nie dziala

jutro pomysle, niech na razie bedzie w konstruktorze

a jak np. w designerze dodac sobie dwuwymiarowa tablice chociazby przyciskow ? (tak bym pozniej mogl je traktowac jako logiczna calosc) ? (da sie to Designerem)

bo brak mozliwosci ingerencji *.ui znowu to utrudnia (chyba kolejny powod by pozbyc sie tego designera ;))

0

ok, choc moj designer jest troche nowszy i jakos mimo ze zrobilem podobnie to nie dziala

jutro pomysle, niech na razie bedzie w konstruktorze

a jak np. w designerze dodac sobie dwuwymiarowa tablice chociazby przyciskow ? (tak bym pozniej mogl je traktowac jako logiczna calosc) ? (da sie to Designerem)

bo brak mozliwosci ingerencji *.ui znowu to utrudnia (chyba kolejny powod by pozbyc sie tego designera ;))

0

Człowieku po cholerę chcesz ingerować w *.ui? Cały zamysł z tym polega na tym by oddzielić ui, który sobie wyklinasz, od logiki okienka. W ten sposób kod jest czystszy nie jest zaśmiecony mało czytelną część UI, która może być dość rozwlekła.
Spokojnie możesz modyfikować część UI jeśli to dobrze przemyślisz. Jeśli chcesz mieć nieokreśloną liczbę przycisków to dodaj w designer layout a potem dodawaj w kodzie te przyciski.
Np wsadzając QBoxLayout w odpowiednie miejsce w desiner, dodajesz taki kod i zadziała jak należy (pisane z pamięci i z palca, więc mogą być istotne literówki):

void MainWindow::dodoajButtona(const QString &nazwa, const char *slot)
{
     QButton *button = new QButton(nazwa);
     // button->setObjectName(nazwa); // czasami może być przydatne
     connect(button, SIGNAL(clicked()), this, slot);
     ui->boxLayout->addWidget(button);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1