Название: Как эстетичнее и правильнее создавать форму?
Отправлено: 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(); }
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: Rcus от Сентябрь 04, 2009, 11:52
Правильного пути нет, но ваш мне непонятен, а потому при всей толерантности к девиациям кажется неправильным. Посмотрите для начала как в пример создаются формы, как uic генерит код, как QtCreator генерирует классы.
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: fa от Сентябрь 04, 2009, 12:19
Почему-то мне кажется, что QtCreator наворотит что-то ужасное... Не доверяю автоматам в этом плане =))
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: SABROG от Сентябрь 04, 2009, 12:57
Почему-то мне кажется, что QtCreator наворотит что-то ужасное... Не доверяю автоматам в этом плане =))
Ага, в trolltech сидят программисты, которые целыми днями занимаются только тем, что творят что-то ужасное. Если уж QtCreator может натворить что-то ужасное, то можно только догадываться, что за ужасный код содержится в библиотеке Qt.
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: fa от Сентябрь 04, 2009, 13:28
Ага, в trolltech сидят программисты, которые целыми днями занимаются только тем, что творят что-то ужасное. Если уж QtCreator может натворить что-то ужасное, то можно только догадываться, что за ужасный код содержится в библиотеке Qt.
Я имею в виду, что найдется много лишнего кода, в котором проще будет запутаться, чем в коде целиком собственноручно написанном.
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: Rcus от Сентябрь 04, 2009, 13:47
А насчитал сходу несколько ошибок: - виджеты создаются два раза - mWindow не нужен, сам класс mainWindow является окном. - show() нужен только для объекта окна - установка геометрии виджетов вместо layout'ов убивает на корню возможность быстрого изменения UI, а также возможности перевода и нормального изменения геометрии при изменении размера окна.
Читайте лучше $env{QTDIR}/examples
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: fa от Сентябрь 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(); }
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: Rcus от Сентябрь 04, 2009, 14:00
/* shrugs */ Я обычно не разбиваю создание окна в разные функции (если только табы/стек виджетов разнести), но если вам так удобнее... и layout'ы можно создавать передавая в конструктор виджет, тогда не нужно писать setLayout
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: fa от Сентябрь 04, 2009, 14:12
Я второй день в своей жизни вижу Кьют, поэтому плохо понимаю как лучше...
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: fa от Сентябрь 04, 2009, 15:42
Еще один вопрос, если я все таки разбиваю создание окна в разные функции, как и где мне писать обработчики сигналов ???
Название: Re: Как эстетичнее и правильнее создавать форму?
Отправлено: fa от Сентябрь 04, 2009, 17:24
Все, разобрался ^_^
|