Я работаю над программированием на C ++ GUI с помощью qt5, и у меня возникла проблема с диалоговым окном изменения формы, при нажатии кнопки «Дополнительно» диалоговое окно должно было изменить свою форму.
I прочитал некоторые ответы из Qt Center, установив флажок «Больше кнопок» в Qt Designer, но это не работает.
Я приложил приведенный ниже код для ясности. Может кто-нибудь подскажите, пожалуйста, что я делаю не так.
sortdialog.h
#ifndef SORTDIALOG_H
#define SORTDIALOG_H
#include "ui_sortdialog.h"
#include <QDialog>
class sortdialog : public QDialog, public Ui::SortDialog
{
Q_OBJECT
public:
sortdialog(QWidget *parent=nullptr);
void setColumRange(QChar first, QChar last);
};
#endif // SORTDIALOG_H
sortdialog. cpp
#include "sortdialog.h"
sortdialog::sortdialog(QWidget *parent)
:QDialog(parent)
{
setupUi(this);
secondaryGroupBox->hide();
tertiaryGroupBox->hide();
layout()->setSizeConstraint(QLayout::SetFixedSize);
setColumRange('A', 'Z');
}
void sortdialog::setColumRange(QChar first, QChar last)
{
primaryColumnCombo->clear();
secondaryColumnCombo->clear();
tertiaryColumnCombo->clear();
secondaryColumnCombo->addItem(tr("None"));
tertiaryColumnCombo->addItem(tr("None"));
primaryColumnCombo->setMinimumSize(
secondaryColumnCombo->sizeHint());
QChar ch = first;
while (ch <= last) {
primaryColumnCombo->addItem(QString(ch));
secondaryColumnCombo->addItem(QString(ch));
tertiaryColumnCombo->addItem(QString(ch));
ch = ch.unicode() + 1;
}
}
UI Image
Я использую Qt Designer для создания файла пользовательского интерфейса и использую ui c для преобразования файла пользовательского интерфейса в заголовочные файлы c ++, как показано ниже.
/********************************************************************************
** Form generated from reading UI file 'sortdialog.ui'
**
** Created by: Qt User Interface Compiler version 5.14.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_SORTDIALOG_H
#define UI_SORTDIALOG_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QVBoxLayout>
QT_BEGIN_NAMESPACE
class Ui_SortDialog
{
public:
QGridLayout *gridLayout_4;
QGroupBox *primaryGroupBox;
QGridLayout *gridLayout;
QComboBox *primaryOrderCombo;
QSpacerItem *horizontalSpacer;
QLabel *label_2;
QComboBox *primaryColumnCombo;
QLabel *label;
QVBoxLayout *verticalLayout;
QPushButton *okButton;
QPushButton *cancelButton;
QSpacerItem *verticalSpacer;
QPushButton *moreButton;
QSpacerItem *verticalSpacer_2;
QGroupBox *secondaryGroupBox;
QGridLayout *gridLayout_2;
QComboBox *secondaryOrdercombo;
QLabel *label_3;
QComboBox *secondaryColumnCombo;
QSpacerItem *horizontalSpacer_2;
QLabel *label_4;
QGroupBox *tertiaryGroupBox;
QGridLayout *gridLayout_3;
QComboBox *tertiaryOrderCombo;
QLabel *label_5;
QComboBox *tertiaryColumnCombo;
QSpacerItem *horizontalSpacer_3;
QLabel *label_6;
void setupUi(QDialog *SortDialog)
{
if (SortDialog->objectName().isEmpty())
SortDialog->setObjectName(QString::fromUtf8("SortDialog"));
SortDialog->resize(371, 442);
gridLayout_4 = new QGridLayout(SortDialog);
gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
primaryGroupBox = new QGroupBox(SortDialog);
primaryGroupBox->setObjectName(QString::fromUtf8("primaryGroupBox"));
gridLayout = new QGridLayout(primaryGroupBox);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
primaryOrderCombo = new QComboBox(primaryGroupBox);
primaryOrderCombo->addItem(QString());
primaryOrderCombo->addItem(QString());
primaryOrderCombo->setObjectName(QString::fromUtf8("primaryOrderCombo"));
gridLayout->addWidget(primaryOrderCombo, 9, 1, 1, 2);
horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
gridLayout->addItem(horizontalSpacer, 0, 2, 1, 1);
label_2 = new QLabel(primaryGroupBox);
label_2->setObjectName(QString::fromUtf8("label_2"));
gridLayout->addWidget(label_2, 9, 0, 1, 1);
primaryColumnCombo = new QComboBox(primaryGroupBox);
primaryColumnCombo->addItem(QString());
primaryColumnCombo->setObjectName(QString::fromUtf8("primaryColumnCombo"));
gridLayout->addWidget(primaryColumnCombo, 0, 1, 1, 1);
label = new QLabel(primaryGroupBox);
label->setObjectName(QString::fromUtf8("label"));
gridLayout->addWidget(label, 0, 0, 1, 1);
gridLayout_4->addWidget(primaryGroupBox, 0, 0, 1, 1);
verticalLayout = new QVBoxLayout();
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
okButton = new QPushButton(SortDialog);
okButton->setObjectName(QString::fromUtf8("okButton"));
verticalLayout->addWidget(okButton);
cancelButton = new QPushButton(SortDialog);
cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
verticalLayout->addWidget(cancelButton);
verticalSpacer = new QSpacerItem(20, 13, QSizePolicy::Minimum, QSizePolicy::Expanding);
verticalLayout->addItem(verticalSpacer);
moreButton = new QPushButton(SortDialog);
moreButton->setObjectName(QString::fromUtf8("moreButton"));
verticalLayout->addWidget(moreButton);
gridLayout_4->addLayout(verticalLayout, 0, 1, 2, 1);
verticalSpacer_2 = new QSpacerItem(20, 79, QSizePolicy::Minimum, QSizePolicy::Expanding);
gridLayout_4->addItem(verticalSpacer_2, 1, 0, 1, 1);
secondaryGroupBox = new QGroupBox(SortDialog);
secondaryGroupBox->setObjectName(QString::fromUtf8("secondaryGroupBox"));
gridLayout_2 = new QGridLayout(secondaryGroupBox);
gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
secondaryOrdercombo = new QComboBox(secondaryGroupBox);
secondaryOrdercombo->addItem(QString());
secondaryOrdercombo->addItem(QString());
secondaryOrdercombo->setObjectName(QString::fromUtf8("secondaryOrdercombo"));
gridLayout_2->addWidget(secondaryOrdercombo, 9, 1, 1, 2);
label_3 = new QLabel(secondaryGroupBox);
label_3->setObjectName(QString::fromUtf8("label_3"));
gridLayout_2->addWidget(label_3, 9, 0, 1, 1);
secondaryColumnCombo = new QComboBox(secondaryGroupBox);
secondaryColumnCombo->addItem(QString());
secondaryColumnCombo->setObjectName(QString::fromUtf8("secondaryColumnCombo"));
gridLayout_2->addWidget(secondaryColumnCombo, 0, 1, 1, 1);
horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
gridLayout_2->addItem(horizontalSpacer_2, 0, 2, 1, 1);
label_4 = new QLabel(secondaryGroupBox);
label_4->setObjectName(QString::fromUtf8("label_4"));
gridLayout_2->addWidget(label_4, 0, 0, 1, 1);
gridLayout_4->addWidget(secondaryGroupBox, 2, 0, 1, 1);
tertiaryGroupBox = new QGroupBox(SortDialog);
tertiaryGroupBox->setObjectName(QString::fromUtf8("tertiaryGroupBox"));
gridLayout_3 = new QGridLayout(tertiaryGroupBox);
gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
tertiaryOrderCombo = new QComboBox(tertiaryGroupBox);
tertiaryOrderCombo->addItem(QString());
tertiaryOrderCombo->addItem(QString());
tertiaryOrderCombo->setObjectName(QString::fromUtf8("tertiaryOrderCombo"));
gridLayout_3->addWidget(tertiaryOrderCombo, 9, 1, 1, 2);
label_5 = new QLabel(tertiaryGroupBox);
label_5->setObjectName(QString::fromUtf8("label_5"));
gridLayout_3->addWidget(label_5, 9, 0, 1, 1);
tertiaryColumnCombo = new QComboBox(tertiaryGroupBox);
tertiaryColumnCombo->addItem(QString());
tertiaryColumnCombo->setObjectName(QString::fromUtf8("tertiaryColumnCombo"));
gridLayout_3->addWidget(tertiaryColumnCombo, 0, 1, 1, 1);
horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
gridLayout_3->addItem(horizontalSpacer_3, 0, 2, 1, 1);
label_6 = new QLabel(tertiaryGroupBox);
label_6->setObjectName(QString::fromUtf8("label_6"));
gridLayout_3->addWidget(label_6, 0, 0, 1, 1);
gridLayout_4->addWidget(tertiaryGroupBox, 3, 0, 1, 1);
QWidget::setTabOrder(primaryColumnCombo, primaryOrderCombo);
QWidget::setTabOrder(primaryOrderCombo, secondaryColumnCombo);
QWidget::setTabOrder(secondaryColumnCombo, secondaryOrdercombo);
QWidget::setTabOrder(secondaryOrdercombo, tertiaryColumnCombo);
QWidget::setTabOrder(tertiaryColumnCombo, tertiaryOrderCombo);
QWidget::setTabOrder(tertiaryOrderCombo, okButton);
QWidget::setTabOrder(okButton, cancelButton);
QWidget::setTabOrder(cancelButton, moreButton);
retranslateUi(SortDialog);
QObject::connect(okButton, SIGNAL(clicked()), SortDialog, SLOT(accept()));
QObject::connect(cancelButton, SIGNAL(clicked()), SortDialog, SLOT(reject()));
QObject::connect(moreButton, SIGNAL(toggled(bool)), secondaryGroupBox, SLOT(setVisible(bool)));
QObject::connect(moreButton, SIGNAL(toggled(bool)), tertiaryGroupBox, SLOT(setVisible(bool)));
QMetaObject::connectSlotsByName(SortDialog);
} // setupUi
void retranslateUi(QDialog *SortDialog)
{
SortDialog->setWindowTitle(QCoreApplication::translate("SortDialog", "Sort", nullptr));
primaryGroupBox->setTitle(QCoreApplication::translate("SortDialog", "&Primary Key", nullptr));
primaryOrderCombo->setItemText(0, QCoreApplication::translate("SortDialog", "Ascending", nullptr));
primaryOrderCombo->setItemText(1, QCoreApplication::translate("SortDialog", "Descending", nullptr));
label_2->setText(QCoreApplication::translate("SortDialog", "Order:", nullptr));
primaryColumnCombo->setItemText(0, QCoreApplication::translate("SortDialog", "None", nullptr));
label->setText(QCoreApplication::translate("SortDialog", "Column:", nullptr));
okButton->setText(QCoreApplication::translate("SortDialog", "OK", nullptr));
cancelButton->setText(QCoreApplication::translate("SortDialog", "Cancel", nullptr));
moreButton->setText(QCoreApplication::translate("SortDialog", "&More", nullptr));
secondaryGroupBox->setTitle(QCoreApplication::translate("SortDialog", "&Secondary Key", nullptr));
secondaryOrdercombo->setItemText(0, QCoreApplication::translate("SortDialog", "Ascending", nullptr));
secondaryOrdercombo->setItemText(1, QCoreApplication::translate("SortDialog", "Descending", nullptr));
label_3->setText(QCoreApplication::translate("SortDialog", "Order:", nullptr));
secondaryColumnCombo->setItemText(0, QCoreApplication::translate("SortDialog", "None", nullptr));
label_4->setText(QCoreApplication::translate("SortDialog", "Column:", nullptr));
tertiaryGroupBox->setTitle(QCoreApplication::translate("SortDialog", "&Tertiary Key", nullptr));
tertiaryOrderCombo->setItemText(0, QCoreApplication::translate("SortDialog", "Ascending", nullptr));
tertiaryOrderCombo->setItemText(1, QCoreApplication::translate("SortDialog", "Descending", nullptr));
label_5->setText(QCoreApplication::translate("SortDialog", "Order:", nullptr));
tertiaryColumnCombo->setItemText(0, QCoreApplication::translate("SortDialog", "None", nullptr));
label_6->setText(QCoreApplication::translate("SortDialog", "Column:", nullptr));
} // retranslateUi
};
namespace Ui {
class SortDialog: public Ui_SortDialog {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_SORTDIALOG_H