qmainwindow

Mattepuffo's logo
Centrare una finestra in Qt 6

Centrare una finestra in Qt 6

In questo articolo avevamo visto come centrare una finestra, QMainWindow, in Qt.

Ma parlavamo della versione 5; nella 6 QDesktopWidget è deprecato e quindi quel codice non funziona.

Mattepuffo's logo
Impostare la dimensione della finestra in Qt

Impostare la dimensione della finestra in Qt

Ho deciso di creare un programma in Qt senza usare l'interfaccia grafica; e quindi scrivendo tutto il codice.

La mia finestra deve avere queste caratteristiche:

  • essere centrata
  • partire grande l'80% della risoluzione dello schermo
  • avere una minima risoluzione

Ovviamente voi potete "levare" quello che non vi serve.

Mattepuffo's logo
Centrare una QMainWindow in Qt

Centrare una QMainWindow in Qt

Quando lanciamo la finestra principale da QtCreator, la QMainWindow risulta centrata rispetto al desktop.

Poi avviamo il programma senza passare per QtCreator, e la finestra è decentrata.

Ho provato a vedere nel relativo file .ui, ma non ho trovato nulla al riguardo.

Mattepuffo's logo
Da Qstring a string e viceversa

Da Qstring a string e viceversa

Quando si sviluppa con le Qt si incappa spesso in problemi incompatibilità tra le classi native del C++ e del framework.

Nel caso specifico mi sono trovato a dover fare la conversione da QString a string e viceversa.

Questo perchè ho una classe che svolge determinate operazioni al di fuori del fremwork e che ha una risultato raccolto dalla gui.

Nello specifico la classe è questa:

#include "scan.h"

#include <stdio.h>

#include <stdlib.h>

#include <string>

using std::string;

Scan::Scan()

{

}

string Scan::scanNetwork(string cmd)

{

char *buf = &cmd[0];

FILE *p = popen(buf, "r");

string s;

for (size_t count; (count = fread(buf, 1, sizeof(buf), p));)

{

s += string(buf, buf + count);

}

pclose(p);

return s;

}

La classe prende come input quanto scritto in una QTextEdit e il risultato viene visualizzato in un'altra QTextEdit.

Solo che personalmente nella classe preferisco usare le librerie standard del C++, mentre nella QMainWindow usare le classi Qt.

Vediamo quindi come fare i due passaggi.

Mattepuffo's logo
Qt, signal e slot

Qt, signal e slot

Ho cominciato lo sviluppo di un programmino in C++ e le Qt.

Con Qt-Creator, l'IDE ufficiale per lo sviluppo cone le Qt, ho creato un progetto Qt Widget Project -> Qt Gui Application.

Mi sono ritrovato con una QWindow e dall'editor grafico ho aggiungo due QAction al menu.

A questo punto il problema era: come fare a collegare un'azione/evento alla voce del menu (QAction)?

Bene, vediamo come fare.

I file che ci interessano sono mainwindow.h e mainwindow.cpp.

In pratica dobbiamo aggiungere una funzione che poi collegheremo alla QAction.

Inizialmente i file erano questi:

    #ifndef MAINWINDOW_H

    #define MAINWINDOW_H

    #include <QMainWindow>

    namespace Ui {

        class MainWindow;

    }

    class MainWindow : public QMainWindow

    {

        Q_OBJECT

    public:

        explicit MainWindow(QWidget *parent = 0);

        ~MainWindow();

    private:

        Ui::MainWindow *ui;

    };

    #endif // MAINWINDOW_H

    #include "ui_mainwindow.h"

    #include "mainwindow.h"

    MainWindow::MainWindow(QWidget *parent) :

        QMainWindow(parent),

        ui(new Ui::MainWindow)

    {

        ui->setupUi(this);

    }

    MainWindow::~MainWindow()

    {

        delete ui;

    }

I file predefiniti dopo la creazione del progetto.

A questo punto dobbiamo creare una funzione che venga eseguita al click sulla voce del menu (o all'esecuzione della scorciatoia da tastiera che è possibile impostare anche dall'editor grafico).