切换两个主窗口

时间:2017-05-15 06:26:47

标签: c++ qt qt4 signals-slots qt-signals

我是QT GUI编程的新手。 我试图通过使用show和hide来连续测试切换两个主窗口。

我在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();

      }

测试只能显示一次窗口,但是他们不会显示和隐藏第二次迭代。

有人可以帮忙解决这个问题。

1 个答案:

答案 0 :(得分: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();
};