2014-12-12 2 views
0

Я использую QtabWidget в создателе Qt и создал три вкладки (вкладка 1, вкладка 2, вкладка 3). Каждая вкладка имеет около 30 полей. Теперь, когда я запускаю приложение первоначально было бы на вкладке 1. В настоящее время все данные, отображаемые на всех трех вкладках, вытягиваются сразу. Есть ли способ, когда пользователь нажимает на Tab-2, тогда данные, соответствующие tab-2, загружаются и одинаковы для tab-3. Я ищу некоторые функции, такие как «onTabClick». Я проверил слоты, связанные с виджетами вкладки, и не смог найти их.Как загрузить данные на вкладке щелчок в qt creator

Код для моей формы в Qt:

mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <ctime> 
#include <iostream> 
#include <QPixmap> 
#include <stdio.h> 
#include <QProcess> 
#include <QString> 
#include <QPainter> 
#include <QPen> 
#include <QBrush> 
#include <QLabel> 
#include <QTimer> 
#include <ctime> 


using namespace std; 

void MainWindow::onTabChanged(int tabIndex) { 

    cout<<"the tab index is:"<<tabIndex<<endl; 
    if (tabIndex == 0) { 
     // Create the first tab elements 

     cout<<"tab 0"<<endl; 
    } else if (tabIndex == 1) { 
     // ... 

     cout<<"tab 1"<<endl; 

    } 
} 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 


    time_t now = time(0); 
    char* dt = ctime(&now); 

    ui->setupUi(this); 
    this->setWindowTitle("First Qt Project"); 
    connect(ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(onTabChanged(int)));  

} 



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

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private slots: 


    void onTabChanged(int tabIndex); 



private: 
    Ui::MainWindow *ui; 
}; 

#endif // MAINWINDOW_H 

ответ

0

Вы можете использовать QTabWidget::currentChanged(int) сигнал для обработки вкладок меняющегося событие. То есть:

Подключение сигнала с соответствующим слотом:

connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(onTabChanged(int))); 

и в слот:

void MyClass::onTabChanged(int tabIndex) { 
    if (tabIndex == 0) { 
     // Create the first tab elements 
    } else if (tabIndex == 1) { 
     // ... 
    } 
} 
+0

Я добавил файл mainwindow.cpp, который у меня есть в моем проекте. Я только начал использовать создателя Qt, и я не уверен, где мне нужно внести изменения. Не могли бы вы дать мне знать, как я могу это сделать. – Valla

+0

Я смог добавить код в свой файл и добавить слот в мой файл mainwindow.h. Но функция не вызывается на вкладке change.Could вы дайте мне знать, что мне не хватает. Спасибо. – Valla

+0

@ Valla, возможно, вы пропустили макрос Q_OBJECT в объявлении класса MainWindow. Добавьте его, запустите qmake и сделайте еще раз. Или перестройте проект с помощью QtCreator, если вы его используете. Не забудьте добавить 'connect (tabWidget, SIGNAL (currentChanged (int)), это, SLOT (onTabChanged (int))),' в конструктор вашего главного окна. – vahancho

0

Я нашел решение для этого вопроса:

по умолчанию любые слоты, которые создаются находятся в разделе «частные слоты» в файле MainWindow.h, как показано ниже:

private slots: 
//default slots created from the ui(when the user right clicks on a button and then connects to a  slot) 

Так что в моем случае, поскольку функция onTabChanges является определяемой пользователем функцией, и я вручную создал SLOT для этой функции, это должно быть в разделе открытых слотов. Таким образом, в том числе и этот способ разрешил проблему.

public slots: 

void onTabChanged(int tabIndex);