[QT Creator] Uruchomienie górnego menu - sloty,

0

Utworzyłem projekt "QT4 Gui Application". Jeszcze nie zmieniałem plików .cpp i .h. W pliku mainwindow.ui utworzyłem okno główne programu (z górnym menu). Co mam teraz zrobić, aby np. po kliknięciu Plik -> zakończ, program się wyłączał?

main.cpp:

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp:

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

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

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

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>

namespace Ui
{
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

private slots:
};

#endif // MAINWINDOW_H
0

Łączysz akcję (pozycja w menu) z własną funkcją np. zamknijMnie()..

connect(ui->actionZakoncz,SIGNAL(triggered()),this,SLOT(zamknijMnie()));
0

Dzięki ;)
Dodałem:

    connect(ui->action_exit,SIGNAL(triggered()),qApp,SLOT(quit()));

Do mainwindow.cpp (do funkcji MainWindow::MainWindow).

Teraz mam takie coś:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->action_exit,SIGNAL(triggered()),qApp,SLOT(quit()));
    connect(ui->action_about,SIGNAL(triggered()),this,SLOT(about()));
}

...

void MainWindow::about()
{
       QMessageBox::about(this,tr("ąśćĄŚĆŁżł"),
            tr("ąśćłźżĄŚĆŁŻ"));
}

Niestety po kliknięciu w "O programie" zamiast polskich znaków są krzaki. Co zrobić, aby to działało?

I 2 pytanie:
Utworzyłem pliki form_configure.ui, form_confiure.h i form_configure.cpp. Po kliknięciu na Konfiguracja->Konfiguruj ma się pokazać nowe okno. Jak to zrobić (funkcja pokazująca okno)?

0

a czy zdefiniowałeś about jako slot?
Czyli jak wygląda plik nagłówkowy MainWindow?

0
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>

namespace Ui
{
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

private slots:
    void about();
};

#endif // MAINWINDOW_H
0
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
#include <QTextCodec>
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->action_exit,SIGNAL(triggered()),qApp,SLOT(quit()));
    connect(ui->action_about,SIGNAL(triggered()),this,SLOT(about()));
}

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

void MainWindow::about()
{
       QMessageBox::about(this,"O programie E-Cooking",
            "E-Cooking jest bazą liczącą ponad 1500 przepisów. Można dodawać przepisy do ulubionych. Baza przepisów jest często aktualizowana, więc ich liczba wzrasta.<br /><br /><h3>Wersja</h3>1.0.0");
}

mainwindow.cpp:5: error: expected constructor, destructor, or type conversion before '(' token

Co jest źle?

0

Musisz to umieścić wewnątrz jakiejś funkcji..
Np. w kontruktorze MainWindow..
Pamietaj zeby pozniej nie uzywac tr() tam gdzie mogą być pl znaki.

0
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
#include <QTextCodec>



MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    ui->setupUi(this);
    connect(ui->action_exit,SIGNAL(triggered()),qApp,SLOT(quit()));
    connect(ui->action_about,SIGNAL(triggered()),this,SLOT(about()));
}

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

void MainWindow::about()
{
    QMessageBox::about(this,"ąśćłĄŚĆŁ","ąśćłĄŚĆŁ");
}

Nie ma błędów przy kompilacji, ale nadal nie wyświetlają się pl znaki (biały znak zapytania na czarnym rombie).

0

a zamień te linijki

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    ui->setupUi(this);
0

Nadal jest źle.

0

Zrobiłem reboota systemu i działa ;)

Ostatnie pytanie:
Ten kod powoduje otwarcie okna informacyjnego z jakimś tekstem:

QMessageBox::about(this,"aaa","bbb");

Jakim kodem otworzyć okno, które jest w form_configure.ui, form_configure.h i form_configure.cpp?

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