2017-05-15 88 views
0

我是QT GUI編程的新手。 我試圖通過使用show和hide連續測試切換兩個mainwindows。切換兩個主窗口

我在main.cpp中

 main(){ 
     QApplication a(argc , argv) 
     Mainwinodw1 *window1 = new Mainwindow1(); 
     Mainwinodw1 *window2 = new Mainwindow2(); 

     for (;;) 

     { 
      window1->show(); 
      delay(); 
      window1->hide(); 

      window2->show(); 
      delay(); 
      window2->hide(); 

     } 

     return a.exec(); 

     } 

該測試可以顯示窗口只有一次創建了一個簡單的代碼,但duirng第二次迭代他們不顯示和隱藏。

有人可以幫助解決這個問題。

+0

MainWindow1是一個類。 window1是指針。 window1.show是一個錯字。它是window1-> show(); –

+0

主要問題是win35w。顯示無法顯示第二次迭代 –

+0

是父窗口小部件= NULL。 –

回答

0

嘗試使用Qt定時器而不是硬編碼延遲功能。

main.cpp中的文件:

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    Mainwindow1 *window1 = new Mainwindow1(); 
    Mainwindow2 *window2 = new Mainwindow2(); 
    WindowSwitcher ws(window1, window2, 2000); 

    window1->show(); 

    return a.exec(); 
} 

WindowSwitcher源代碼:

#include "windowswitcher.h" 
#include <QTimer> 

WindowSwitcher::WindowSwitcher(QMainWindow *w1, QMainWindow *w2, int delay) : QObject(), window1(w1), window2(w2) 
{ 
    QTimer *timer = new QTimer(this); 
    connect(timer, SIGNAL(timeout()), this, SLOT(switchWindow())); 
    timer->start(delay); 
} 

void WindowSwitcher::switchWindow() 
{ 
    if (window1->isVisible()) 
    { 
     window1->hide(); 
     window2->show(); 
    } 
    else 
    { 
     window1->show(); 
     window2->hide(); 
    } 
} 

WindowSwitcher頭文件:

#include <QObject> 
#include <QMainWindow> 

class WindowSwitcher : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit WindowSwitcher(QMainWindow *w1, QMainWindow *w2, int delay); 

private: 
    QMainWindow *window1; 
    QMainWindow *window2; 

public slots: 
    void switchWindow(); 
}; 
+0

非常感謝它的工作。我明白問題在於計時器。 –

+0

我在linux平臺上使用arm cortex c9(800Mhz)上的QT4.8.7。 每幀的時間:30-40毫秒。幀大小:640x480像素。 我看到窗口渲染在屏幕上非常緩慢。 @ ramzes2 –