Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2013, 17:12   #11
novicepro
Пользователь
 
Регистрация: 01.05.2011
Сообщений: 38
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Опишите подробнее, что Вы хотите. Я не понимаю.
если использовать дизайнер, то там есть объект horizontalSpacer. а как прописать этот элемент программно, если не использовать Дизайн?
novicepro вне форума Ответить с цитированием
Старый 15.10.2013, 20:05   #12
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от novicepro Посмотреть сообщение
если использовать дизайнер, то там есть объект horizontalSpacer. а как прописать этот элемент программно, если не использовать Дизайн?
Нужно использовать addStretch();

Попробуйте поиграться со следующем кодом. Сначала запустите, как есть и порастягивайте окно в высоту и в ширину.

Потом закомментируйте строки:

Код:
    horizontalLayout->addStretch();
Код:
    verticalLayout->addStretch();
Попробуйте опять порастягивать.

horizontalSpacer.pro
Код:
SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h
main.cpp
Код:
#include <QApplication>
#include <mainwindow.h>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    MainWindow window;
    window.show();

    return app.exec();
}
mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    
signals:
    
public slots:
    
};

#endif // MAINWINDOW_H
mainwindow.cpp
Код:
#include "mainwindow.h"
#include <QtGui>
#include <QWidget>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    // Horizontal Layout
    QHBoxLayout *horizontalLayout = new QHBoxLayout;
    QPushButton *btnHorOne = new QPushButton(tr("hor. One"));
    QPushButton *btnHorTwo = new QPushButton(tr("hor. Two"));
    QPushButton *btnHorThree = new QPushButton(tr("hor. Three"));
    horizontalLayout->addWidget(btnHorOne);
    horizontalLayout->addWidget(btnHorTwo);
    horizontalLayout->addWidget(btnHorThree);
    horizontalLayout->addStretch();

    // Vertical Layout
    QVBoxLayout *verticalLayout = new QVBoxLayout;
    QPushButton *btnVerOne = new QPushButton(tr("ver. One"));
    QPushButton *btnVerTwo = new QPushButton(tr("ver. Two"));
    QPushButton *btnVerThree = new QPushButton(tr("ver. Three"));
    verticalLayout->addWidget(btnVerOne);
    verticalLayout->addWidget(btnVerTwo);
    verticalLayout->addWidget(btnVerThree);
    verticalLayout->addStretch();

    // Main Layout
    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(horizontalLayout);
    mainLayout->addLayout(verticalLayout);

    // Set Centrel Widget in MainWindow
    QWidget *widget = new QWidget;
    widget->setLayout(mainLayout);
    this->setCentralWidget(widget);
}
На здоровье
8Observer8 вне форума Ответить с цитированием
Старый 15.10.2013, 20:09   #13
novicepro
Пользователь
 
Регистрация: 01.05.2011
Сообщений: 38
По умолчанию

Спасибо
novicepro вне форума Ответить с цитированием
Старый 15.10.2013, 20:10   #14
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Кстати, создание интерфейса пользователя лучше убрать в отдельную функцию и назвать её, к примеру, setUI()

mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    
signals:
    
public slots:
    
private:
    void setUI();
};

#endif // MAINWINDOW_H
mainwindow.cpp
Код:
#include "mainwindow.h"
#include <QtGui>
#include <QWidget>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    setUI();
}

void MainWindow::setUI() {
    // Horizontal Layout
    QHBoxLayout *horizontalLayout = new QHBoxLayout;
    QPushButton *btnHorOne = new QPushButton(tr("hor. One"));
    QPushButton *btnHorTwo = new QPushButton(tr("hor. Two"));
    QPushButton *btnHorThree = new QPushButton(tr("hor. Three"));
    horizontalLayout->addWidget(btnHorOne);
    horizontalLayout->addWidget(btnHorTwo);
    horizontalLayout->addWidget(btnHorThree);
    horizontalLayout->addStretch();

    // Vertical Layout
    QVBoxLayout *verticalLayout = new QVBoxLayout;
    QPushButton *btnVerOne = new QPushButton(tr("ver. One"));
    QPushButton *btnVerTwo = new QPushButton(tr("ver. Two"));
    QPushButton *btnVerThree = new QPushButton(tr("ver. Three"));
    verticalLayout->addWidget(btnVerOne);
    verticalLayout->addWidget(btnVerTwo);
    verticalLayout->addWidget(btnVerThree);
    verticalLayout->addStretch();

    // Main Layout
    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(horizontalLayout);
    mainLayout->addLayout(verticalLayout);

    // Set Centrel Widget in MainWindow
    QWidget *widget = new QWidget;
    widget->setLayout(mainLayout);
    this->setCentralWidget(widget);
}
Это красивее смотрится
8Observer8 вне форума Ответить с цитированием
Старый 15.10.2013, 20:13   #15
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Кстати, создание интерфейса пользователя лучше убрать в отдельную функцию и назвать её, к примеру, setUI()
почему бы интерфейс не накидать в дизайнере через мышкотыкательный интерфейс? - код еще чище и красивей будет ))
rrrFer вне форума Ответить с цитированием
Старый 15.10.2013, 20:15   #16
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
почему бы интерфейс не накидать в дизайнере через мышкотыкательный интерфейс? - код еще чище и красивей будет ))
У меня личная неприязнь к дизайнеру. Мне нравится создавать приложения без него с нуля (Empty Qt Project). Пока меня это устраивает. Дальше посмотрим.
8Observer8 вне форума Ответить с цитированием
Старый 04.11.2013, 01:38   #17
novicepro
Пользователь
 
Регистрация: 01.05.2011
Сообщений: 38
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
почему бы интерфейс не накидать в дизайнере через мышкотыкательный интерфейс? - код еще чище и красивей будет ))
как в этом случае при нажатии на кнопку (находится в первом дизайнере, например Designer1.ui) запустить вторую форму (Designer2)?

допустим есть файлы:
Код:
SOURCES += main.cpp \
    Designer1.cpp \
    Designer2.cpp

HEADERS  += \
    Designer1.h \
    Designer2.h

FORMS    += \
    Designer1.ui \
    Designer2.ui
изучаю Qt не так давно и интересно изучать разные способы, чтобы в дальнейшем использовать более удобный
novicepro вне форума Ответить с цитированием
Старый 04.11.2013, 08:17   #18
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от novicepro Посмотреть сообщение
интересно изучать разные способы, чтобы в дальнейшем использовать более удобный
Отличная идея! Молодец

Цитата:
Сообщение от novicepro Посмотреть сообщение
как в этом случае при нажатии на кнопку (находится в первом дизайнере, например Designer1.ui) запустить вторую форму (Designer2)?
Может я вопрос неверно понял...

Я создал проект (Qt Gui Application). При создании проекта оставил по умолчанию MainWindow.

Открыл mainwindow.ui и добавил кнопку с названием "Show Dialog"

Изменил имя кнопки в поле "objectName". Вместо "pushButton" написал "btnShowDialog"

Кликнул правой кнопкой мыши (ПКМ) по названию проекта и выбрал "Add New..."

В окне "New File" выбрал "C++ Class"

Набрал:
"Class Name" -> Dialog
"Base class" -> QDialog
Type information: -> Inherits QWidget

Перешёл обратно на форму и кликнул ПКМ по кнопке "Show Dialog"

Выбрал "Go to slot..." и выбрал "clicked()"

Изменил файл:

mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"

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

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

void MainWindow::on_btnShowDialog_clicked()
{
    Dialog *dialog = new Dialog;
    dialog->show();
}
Запустил приложение:
Изображения
Тип файла: png 80.png (31.4 Кб, 82 просмотров)

Последний раз редактировалось 8Observer8; 04.11.2013 в 11:43.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов окна MyLastHit Свободное общение 12 14.07.2011 13:30
вызов окна RedScreenOfLife Общие вопросы по Java, Java SE, Kotlin 1 24.05.2011 16:23
PrintDialog вызов окна romanzi Компоненты Delphi 2 05.02.2011 19:22
Вызов окна сохранить как mephist Microsoft Office Excel 7 23.07.2009 16:00
Вызов диалогового окна Sapsan Общие вопросы C/C++ 6 30.03.2009 23:03