Russian Qt Forum
Ноябрь 08, 2024, 19:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как эстетичнее и правильнее создавать форму?  (Прочитано 4971 раз)
fa
Гость
« : Сентябрь 04, 2009, 11:43 »

Хотелось бы узнать как правильнее это делать, то есть, к примеру, сейчас я делаю так.
Я больше, чем уверен, что это можно сделать иначе, подскажите пожалуйста, чтобы знать на будущее =)
Ниже три файла по порядку:
mainWindow.h, mainWindow.cpp, main.cpp

Код
C++ (Qt)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
class QPushButton;
class QTextBrowser;
class QGroupBox;
class QWidget;
class QObject;
class QLabel;
 
class mainWindow : public QMainWindow
{
Q_OBJECT
public:
mainWindow();
private slots:
void crc32slot();
private:
QMainWindow *mWindow;
QWidget *centralwidget;
QGroupBox *groupBox;
QGroupBox *groupBox_2;
QGroupBox *groupBox_3;
QPushButton *crc32button;
QPushButton *rot13button;
QTextBrowser *textBrowser;
QTextBrowser *textBrowser_2;
};
#endif
 

Код
C++ (Qt)
#include <QtGui>
#include "mainWindow.h"
 
mainWindow::mainWindow()
{
mWindow = new QMainWindow;
centralwidget = new QWidget;
groupBox = new QGroupBox;
crc32button = new QPushButton;
rot13button = new QPushButton;
groupBox_2 = new QGroupBox;
textBrowser_2 = new QTextBrowser;
groupBox_3 = new QGroupBox;
textBrowser = new QTextBrowser;
 
mWindow->resize(420, 130);
mWindow->setFixedSize(420, 130);
mWindow->show ();
 
centralwidget = new QWidget(mWindow);
centralwidget->show ();
 
groupBox = new QGroupBox(centralwidget);
groupBox->setGeometry(QRect(10, 10, 171, 51));
groupBox->setTitle("Chech Sums Algorithme");
groupBox->show ();
 
crc32button = new QPushButton(groupBox);
crc32button->setGeometry(QRect(10, 20, 75, 23));
crc32button->setText("crc32");
crc32button->show ();
 
rot13button = new QPushButton(groupBox);
rot13button->setGeometry(QRect(90, 20, 75, 23));
rot13button->setText("rot13");
rot13button->show ();
 
groupBox_2 = new QGroupBox(centralwidget);
groupBox_2->setGeometry(QRect(190, 10, 221, 111));
groupBox_2->setTitle("Concole");
groupBox_2->show ();
 
textBrowser_2 = new QTextBrowser(groupBox_2);
textBrowser_2->setGeometry(QRect(10, 20, 201, 81));
textBrowser_2->show ();
 
groupBox_3 = new QGroupBox(centralwidget);
groupBox_3->setGeometry(QRect(10, 70, 171, 51));
groupBox_3->setTitle("Check Sum Value");
groupBox_3->show ();
 
textBrowser = new QTextBrowser(groupBox_3);
textBrowser->setGeometry(QRect(10, 20, 151, 21));
textBrowser->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
textBrowser->show ();
 
mWindow->setCentralWidget(centralwidget);
 

Код
C++ (Qt)
#include <QApplication>
#include "mainWindow.h"
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   mainWindow mw;
 
   return app.exec();
}
 
Записан
Rcus
Гость
« Ответ #1 : Сентябрь 04, 2009, 11:52 »

Правильного пути нет, но ваш мне непонятен, а потому при всей толерантности к девиациям кажется неправильным.
Посмотрите для начала как в пример создаются формы, как uic генерит код, как QtCreator генерирует классы.
Записан
fa
Гость
« Ответ #2 : Сентябрь 04, 2009, 12:19 »

Почему-то мне кажется, что QtCreator наворотит что-то ужасное... Не доверяю автоматам в этом плане =))
Записан
SABROG
Гость
« Ответ #3 : Сентябрь 04, 2009, 12:57 »

Почему-то мне кажется, что QtCreator наворотит что-то ужасное... Не доверяю автоматам в этом плане =))

Ага, в trolltech сидят программисты, которые целыми днями занимаются только тем, что творят что-то ужасное. Если уж QtCreator может натворить что-то ужасное, то можно только догадываться, что за ужасный код содержится в библиотеке Qt.
Записан
fa
Гость
« Ответ #4 : Сентябрь 04, 2009, 13:28 »

Ага, в trolltech сидят программисты, которые целыми днями занимаются только тем, что творят что-то ужасное. Если уж QtCreator может натворить что-то ужасное, то можно только догадываться, что за ужасный код содержится в библиотеке Qt.
Я имею в виду, что найдется много лишнего кода, в котором проще будет запутаться, чем в коде целиком собственноручно написанном.
Записан
Rcus
Гость
« Ответ #5 : Сентябрь 04, 2009, 13:47 »

А насчитал сходу несколько ошибок:
 - виджеты создаются два раза
 - mWindow  не нужен, сам класс mainWindow является окном.
 - show() нужен только для объекта окна
 - установка геометрии виджетов вместо layout'ов убивает на корню возможность быстрого изменения UI, а также возможности перевода и нормального изменения геометрии при изменении размера окна.

Читайте лучше $env{QTDIR}/examples
Записан
fa
Гость
« Ответ #6 : Сентябрь 04, 2009, 13:55 »

Rcus
а если вот таким образом???

Код
C++ (Qt)
#ifndef WINDOW_H
#define WINDOW_H
 
#include <QWidget>
 
class QGroupBox;
 
class Window : public QWidget
{
Q_OBJECT
public:
Window();
 
private slots:
void crc32();
 
private:
QGroupBox *console();
QGroupBox *alg();
QGroupBox *value();
};
 
#endif
 

Код
C++ (Qt)
#include <QtGui>
#include "Window.h"
 
Window::Window()
{
QGridLayout *grid = new QGridLayout;
grid->addWidget ( console(), 0, 1 );
grid->addWidget ( value(), 1, 0 );
grid->addWidget ( alg(), 0, 0 );
setLayout ( grid );
 
setWindowTitle ( tr ( "Check Summer" ) );
setFixedSize ( 570, 140 );
}
 
QGroupBox *Window::console()
{
QGroupBox *groupBox = new QGroupBox ( tr ( "Concole" ) );
 
QTextBrowser *text = new QTextBrowser;
 
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget ( text );
groupBox->setLayout ( vbox );
 
return groupBox;
}
 
QGroupBox *Window::alg()
{
QGroupBox *groupBox = new QGroupBox ( tr ( "Check Sums Algorithme" ) );
 
QPushButton* button1 = new QPushButton ( tr ( "CRC32" ) );
QPushButton* button2 = new QPushButton ( tr ( "ROT13" ) );
QPushButton* button3 = new QPushButton ( tr ( "MAC3" ) );
 
QHBoxLayout *hbox = new QHBoxLayout;
hbox->addWidget ( button1 );
hbox->addWidget ( button2 );
hbox->addWidget ( button3 );
 
groupBox->setLayout ( hbox );
 
connect ( button1, SIGNAL ( clicked() ), this, SLOT ( crc32() ) );
 
return groupBox;
}
 
QGroupBox *Window::value()
{
QGroupBox *groupBox = new QGroupBox ( tr ( "Check Sum Value" ) );
 
QTextBrowser *text = new QTextBrowser;
 
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget ( text );
groupBox->setLayout ( vbox );
 
return groupBox;
}
 

Код
C++ (Qt)
#include <QApplication>
 
#include "Window.h"
 
int main ( int argc, char *argv[] )
{
   QApplication app ( argc, argv );
 
   Window window;
   window.show();
 
   return app.exec();
}
 
Записан
Rcus
Гость
« Ответ #7 : Сентябрь 04, 2009, 14:00 »

/* shrugs */ Я обычно не разбиваю создание окна в разные функции (если только табы/стек виджетов разнести), но если вам так удобнее... и layout'ы можно создавать передавая в конструктор виджет, тогда не нужно писать setLayout
Записан
fa
Гость
« Ответ #8 : Сентябрь 04, 2009, 14:12 »

Я второй день в своей жизни вижу Кьют, поэтому плохо понимаю как лучше...
Записан
fa
Гость
« Ответ #9 : Сентябрь 04, 2009, 15:42 »

Еще один вопрос, если я все таки разбиваю создание окна в разные функции,
как и где мне писать обработчики сигналов Непонимающий
Записан
fa
Гость
« Ответ #10 : Сентябрь 04, 2009, 17:24 »

Все, разобрался ^_^
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.46 секунд. Запросов: 21.