crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QTabWidget мозг спёкся, Не знаю как решить проблему...
fortero
  опции профиля:
сообщение 25.4.2011, 1:31
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 4.12.2010
Пользователь №: 2242

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть класс назовём его OptionsD, у него вот такая публичная функция:
void OptionsD::connDb(){
    headL = new QLabel(tr("Подключение к базе данных:"), this);
    iphostL = new QLabel(tr("Адрес сервера: "), this);
    userdbL = new QLabel(tr("Логин подключения: "), this);
    passdbL = new QLabel(tr("Пароль подключения: "), this);
    basedbL = new QLabel(tr("База данных: "), this);
    
    iphostE = new QLineEdit(tr("localhost"), this);
    userdbE = new QLineEdit(this);
    passdbE = new QLineEdit(this);
    passdbE->setEchoMode(QLineEdit::Password);
    basedbE = new QLineEdit(this);
    
    canclebt = new QPushButton(tr("Выход"), this);
    okbt = new QPushButton(tr("Сохранить"), this);
    
    int y=10;
    headL->setGeometry(100,y,200,24);
    iphostL->setGeometry(20, y*2+24, 140, 24);
    iphostE->setGeometry(180, y*2+24, 140, 24);
    userdbL->setGeometry(20, y*5+24, 140, 24);
    userdbE->setGeometry(180, y*5+24, 140, 24);
    passdbL->setGeometry(20, y*8+24, 140, 24);
    passdbE->setGeometry(180, y*8+24, 140, 24);
    basedbL->setGeometry(20, y*11+24, 140, 24);
    basedbE->setGeometry(180, y*11+24, 140, 24);
    okbt->setGeometry(160, 264, 80, 26);
    canclebt->setGeometry(250, 264, 80, 26);

}

Есть у Qt фича QTabWidget, как мне эту функцию превратить в виджет один, или если есть альтернатива, в общем надо как то передать вот сюда:
tab.addTab(QWidget* tr("БД"));


Уже не сил бороться, что делать?
Спасибо за внимание!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 25.4.2011, 5:05
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Создать свой класс, наследованный от QWidget, нарисовать в нем все то, что нужно. Затем в основном классе создать его как объект. Попробую на примере объяснить:
Класс OptionsWindow - заимствованный от QWidget:
OptionsWindow::OptionsWindow(QWidget *parent) : QWidget(parent){
   headL = new QLabel(tr("Подключение к базе данных:"));
   iphostL = new QLabel(tr("Адрес сервера: "));
   userdbL = new QLabel(tr("Логин подключения: "));
   passdbL = new QLabel(tr("Пароль подключения: "));
   basedbL = new QLabel(tr("База данных: "));
    
   iphostE = new QLineEdit(tr("localhost"));
   userdbE = new QLineEdit(this);
   passdbE = new QLineEdit(this);
   passdbE->setEchoMode(QLineEdit::Password);
   basedbE = new QLineEdit(this);
    
   canclebt = new QPushButton(tr("Выход"));
   okbt = new QPushButton(tr("Сохранить"));
    
   ... // остатки чего, там еще необходимо
   QGridLayout *mainLay = new QGridLayout(this); // главный Layout окна
   mainLay->addWidget(headL, 0, 0);
   ....

   this->setLayout(mainLay);
}


Заголовочный файл главного окна приложения:
QTabWidget      *mainTab;
OptionsWindow  *optionsTab;


А вот теперь уже, Ваша мечта сбылась и Вы запросто можете добавить на mainTab виджет optionsTab

ПыСы: Покажу еще как делать не стоит, но можно
1 создаем какой-либо Layout размещаем на нем все эти же компоненты,
2 запихиваем этот Layout в QGroupBox::setLayout(optionsLayout);
3 QGroupBox является виджетом, содержащим все Ваши компоненты.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fortero
  опции профиля:
сообщение 25.4.2011, 15:56
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 4.12.2010
Пользователь №: 2242

Спасибо сказали: 0 раз(а)




Репутация:   0  


В том-то и проблема что класс OptionsD должен быть унаследованным от QDialog так как - это окно должно быть типа Модельный диалог, а визуализауия модельного диалога осуществляется при помощи не show() а exec()! Вот тут и начинается свисто пляска...

Тут я вот о чём подумал а в tab можно передать индивидуально каждый обект классов QLabrl и QLineEdit только что бы они все попали в одну ячейку (тоесть закладку)???

P.S. или может помочь двойно наследие, такое может быть?

Сообщение отредактировал fortero - 25.4.2011, 15:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 25.4.2011, 20:11
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Гм... вы или сами запутались или меня запутали. В диалоге могут быть вкладки, но тогда сам OpdionsD содержит лишь один виджет QTabWidget. А уж на него навешиваются остальные...

ПыСы #1 Модальностью может обладать ЛЮБОЕ ОКНО по Вашему выбору.
ПыСы #2 Имеется пример TabDialog

Сообщение отредактировал silver47 - 25.4.2011, 20:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fortero
  опции профиля:
сообщение 25.4.2011, 22:45
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 4.12.2010
Пользователь №: 2242

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо проблему решил другим способом, без класса QTabWidget
ИМХО там было всё запутано...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 17:32