Переключайте разные таблицы в диалоге qt используя combobox - PullRequest
1 голос
/ 29 марта 2019

Я хотел бы показать несколько таблиц в одном диалоге, который можно переключать с помощью выпадающего списка в диалоге qt.Как я могу переключиться на другую таблицу, выбрав соответствующий индекс в выпадающем списке?Должен ли я удалить один и добавить новый ...

dialog in qt

1 Ответ

2 голосов
/ 29 марта 2019

Вы можете использовать QStackedWidget, который позволяет вам просматривать только один виджет за раз и изменять виджет в зависимости от currentIndex, как в следующем примере, другой вариант - использовать QStackedLayout:

#include <QtWidgets>

static QTableWidget *create_table(const QString & name){
    QTableWidget *table = new QTableWidget(4, 4);
    for (int j = 0; j < table->columnCount(); ++j){
        table->setHorizontalHeaderItem(j, new QTableWidgetItem(QString("%1-%2").arg(name).arg(j)));
        for(int i=0; i< table->rowCount(); ++i){
            table->setItem(i, j, new QTableWidgetItem(QString::number(QRandomGenerator::global()->bounded(100))));
        }
    }
    return  table;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QStackedWidget *stacked = new QStackedWidget;
    QComboBox *combo = new QComboBox;

    QObject::connect(combo, QOverload<int>::of(&QComboBox::currentIndexChanged), stacked, &QStackedWidget::setCurrentIndex);

    for(const QString & name: {"A", "B", "C", "D", "E"}){
        QTableWidget *table = create_table(name);
        stacked->addWidget(table);
        combo->addItem(name);
    }

    QDialog w;
    QVBoxLayout *lay = new QVBoxLayout{&w};
    lay->addWidget(stacked);
    QHBoxLayout *hlay = new QHBoxLayout;
    hlay->addWidget(new QLabel("Layer"));
    hlay->addWidget(combo);
    lay->addLayout(hlay);
    w.show();
    return a.exec();
}
...