2015-03-18 2 views
2

Можно ли легко сделать QInputDialog с несколькими элементами QComboBox? В качестве альтернативы, самый возможный способ вызвать всплывающее окно/диалог с возможностью разных полей (и т. Д. 2 x QComboBox + 1 x QLineEdit)?QInputDialog с несколькими полями

ответ

4

TADA: Как сделать это немного сложнее всего в коде. И главная причина, по которой это немного сложнее, заключается в том, что вы должны выполнять все макетирование вручную, с компиляцией между каждой итерацией.

PS: Формы очень полезны. И как только вы начнете заниматься мобильной или встроенной разработкой, вы можете начать использовать QML и QML-формы (Qt Quick Controls).

Для описания примеров в Интернете формы трудно и сложно показать, но в большинстве крупных проектов, с которыми я работал в последнее время, есть некоторые формы или QML в миксе.

Надеюсь, что это поможет.

QDialog * d = new QDialog(); 
QVBoxLayout * vbox = new QVBoxLayout(); 
QComboBox * comboBoxA = new QComboBox(); 
comboBoxA->addItems(QStringList() << "A" << "B" << "C"); 
QComboBox * comboBoxB = new QComboBox(); 
comboBoxB->addItems(QStringList() << "A" << "B" << "C"); 
QLineEdit * lineEditA = new QLineEdit(); 

QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok 
                | QDialogButtonBox::Cancel); 

QObject::connect(buttonBox, SIGNAL(accepted()), d, SLOT(accept())); 
QObject::connect(buttonBox, SIGNAL(rejected()), d, SLOT(reject())); 

vbox->addWidget(comboBoxA); 
vbox->addWidget(comboBoxB); 
vbox->addWidget(lineEditA); 
vbox->addWidget(buttonBox); 

d->setLayout(vbox); 

int result = d->exec(); 
if(result == QDialog::Accepted) 
{ 
    // handle values from d 
    qDebug() << "The user clicked:" 
      << "ComboBoxA" << comboBoxA->currentText() 
      << "ComboBoxB" << comboBoxB->currentText() 
      << "LineEditA" << lineEditA->text(); 
} 
+2

Это хорошо, но все явные распределения кучи не нужны. * Все * виджетов могут быть локальными автоматическими переменными. 'QDialog d; QVBoxLayout vbox (&d); QComboBox comboA, comboB; 'и т. Д. –

0

Щелкните правой кнопкой мыши на свой проект в Qt Creator.

Нажмите Add New....

Нажмите Qt > Qt Designer Form Class.

В окне мастера Qt Designer Form Class нажмите Dialog with Buttons, нажмите «ОК», затем укажите имя и нажмите «Готово».

Теперь перетащите и перетащите как можно больше полей со списком и редактирования строк.

Измените имена объектов (в редакторе свойств справа) на что-то значимое.

Для комбинированных ящиков дважды щелкните по ним и добавьте элементы, которые вы хотите отобразить в раскрывающемся списке.

Теперь, когда вы хотите использовать одно из значений из этих элементов, вы можете сделать что-то вроде этого:

Dialog d; 
int result = d.exec();// Show it as a modal dialog 
if(result == QDialog::Accepted) 
{ 
    // handle values from d 
    qDebug() << "The user clicked:" 
      << "ComboBoxA" << d.getComboBoxAText() 
      << "ComboBoxB" << d.getComboBoxBText() 
      << "LineEditA" << d.getLineEditAText(); 
} 

Но убедитесь, что вы добавили некоторые государственные функции в свой класс диалогового окна:

QString Dialog::getComboBoxAText() 
{ 
    return ui->comboBoxA()->currentText(); 
} 

Надеюсь, что помогает.

+0

Благодарим вас за ответ @phyatt. Однако я надеялся найти решение только с использованием кода, а не с Qt Creator. –

Смежные вопросы